8月 072013
 

缘起

当给进程安装一个信号处理程序,如果一个进程在执行一个系统调用的时候,突然收到一个信号,然后转到信号处理程序,当执行完信号处理程序后,系统调用会继续进行吗?

解答

不管在C还是其他语言,都有一个可选的方式,比如在PHP中,pcntl_signal有第三个参数(默认为true),可以继续未完成的系统调用(默认),也可以让系统调用返回失败(第三个参数设置为false);

这在有些时候是需要关心的,比如,fpm在退出的时候,先发送一个信号到每个子进程,子进程收到信号后不是立即死掉,而是先关闭输入,停止accept,然后设置 in_shutdown = 1; 然后信号处理例程执行完毕,返回继续原来的工作(如果原来在执行系统调用,则返回原来的系统调用),执行完一次请求后发现in_shutdown==1 则执行退出

 Posted by at 下午 11:20

 Leave a Reply

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">

(required)

(required)

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据