LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1129|回复: 1

帮忙分析一下signal_pending_state函数

[复制链接]
发表于 2011-10-17 21:47:52 | 显示全部楼层 |阅读模式
2328  static inline int signal_pending_state(long state, struct task_struct *p)
2329  {
2330          if (!(state & (TASK_INTERRUPTIBLE | TASK_WAKEKILL)))
2331                  return 0;
2332          if (!signal_pending(p))
2333                  return 0;
2334  
2335          return (state & TASK_INTERRUPTIBLE) || __fatal_signal_pending(p);
2336  }

这个函数啥意思啊?
第一句:如果进程状态不是TASK_INTERRUPTIBLE,也不是TASK_WAKEKILL,则返回0.
第二句:如果没有信号等待处理则返回0.
第三句:如果进程状态为TASK_INTERRUPTIBLE或有重要信号需要处理则返回1.
这个函数想判断什么事情?我感觉第三句应该是&&而不是||。
发表于 2011-11-8 16:52:59 | 显示全部楼层

信号检测

可以换个角度理解
第二句话:如果不返回的话,说明目标进程确实有信号等待处理。
第三句话,其实与第一句话对应,如果state是TASK_WAKEKILL,而且当前进程确实有SIGKILL信号。

可以判定,p确实有(Interruptible or killable)信号等待处理.
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表