LinuxSir.cn,穿越时空的Linuxsir!

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

关于信号机制的问题,恳求指点

[复制链接]
发表于 2004-1-4 19:29:10 | 显示全部楼层 |阅读模式
我想完成的工作是,子进程向父进程发送信号,父进程收到指定的信号后,会对一些配置变量重新设置,这个重新设置的工作当然是想放到自己注册的信号的处理函数中。

我的问题是,假设父进程正执行到某条语句,这时父进程收到子进程发送的信号,此时父进程是立即调用该信号的处理函数呢?还是继续执行下一条语句,到某个特定的时刻再去调用信号处理函数?
如果是第一种情况,那程序的流程岂不是很难控制,因为我并不知道什么时候会收到信号。
如果是第二种情况,那这个特定的时刻是什么呢?为什么指定这个时刻呢

我选择第一种
发表于 2004-1-5 00:29:18 | 显示全部楼层
这个东西我说不清楚,帮你顶!
发表于 2004-1-5 12:25:19 | 显示全部楼层
我也选第一种,反正肯定不是继续执行下一条语句

这样流程确实难控制
有必要的话你在用到配置变量的地方先检查有没有改变,哈,加个标志吧
发表于 2004-1-5 12:52:27 | 显示全部楼层
“如果是第一种情况,那程序的流程岂不是很难控制,因为我并不知道什么时候会收到信号。”
所以说信号这个东西比较麻烦,你不是在看APUE吗,里面讲的比较好。
 楼主| 发表于 2004-1-5 15:50:15 | 显示全部楼层
这是ZT,我还没看到信号呢!!!:p
发表于 2004-1-7 09:36:56 | 显示全部楼层
信号是一种类似于中断的机制,但它是操作系统级别不是硬件级的机制。这也就是说,当一个信号被操作系统发送到一个进程,这个进程通常情况下必须挂起,转而去处理这个信号。
如何处理这个信号呢?1,通常编写的信号处理器;2,使用操作系统提供的处理器(有两个常见的默认行为SIG_DFL,SIG_IGN )。
信号可能在任何发生——系统调用,时间中断,换页失败时。值得注意的是,有些与信号相关的系统调用是原子性的,也就是说不被信号所中断必须在该调用执行完后,才处理中断。sigsuspend()就是这样一个系统调用。
发表于 2004-1-7 09:51:35 | 显示全部楼层

根据信号处理函数决定你是否该知心下句

主进程收到子进程的信号后,至少应该保存信号标志,否则主进程执行完后,子进程的状态信息不都丢失了?至于主进程的原子调用是不可能让分开的,所以不用担心.
当然,如果是你自己进程控制机制,那就要慎重考虑了.
发表于 2004-1-7 10:48:08 | 显示全部楼层

回复: 关于信号机制的问题,恳求指点

最初由 home 发表
我的问题是,假设父进程正执行到某条语句,这时父进程收到子进程发送的信号,此时父进程是立即调用该信号的处理函数呢?还是继续执行下一条语句,到某个特定的时刻再去调用信号处理函数?


每次进程从内核返回用户空间前夕会检查是否有悬而未决的信号,如果有的话就去处理,没有的话就立刻返回用户空间.
父进程收到信号马上去执行是不可能的。至少它要等到内核返回用户空间时,此外还可能有其它未决信号等待处理
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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