睡觉后杀了

时间:2010-11-30 22:06:21

标签: c++ c linux signals sleep

使用kill(pid,SIGTERM)后我无法使我的程序进入sleep()状态 我该怎么办?

我正在使用的代码:

kill(PID_of_Process_to_be_killed,SIGTERM);
sleep(5); --> this is not working
sleep(5); --> this is working

现在的解决方案是:

kill(PID_of_Process_to_be_killed,SIGTERM);
sleep(sleep(5));

但为什么第一次睡觉后杀死会返回0?

2 个答案:

答案 0 :(得分:6)

由于收到信号,您的sleep()电话可能会提前终止。检查返回值。如果是肯定的,您可能希望再次sleep()该值。来自http://www.manpagez.com/man/3/Sleep/

  

如果sleep()函数因为请求的时间已经过去而返回,   返回的值将为零。 如果sleep()函数返回原因   在发送信号时,返回的值将是未记录的金额   (请求的时间减去实际睡觉的时间),以秒为单位

答案 1 :(得分:3)

除非你处理信号,否则SIGTERM就会死亡。

如果发送信号sleep的另一个进程或线程返回EINTR。

如果您使用标准库而不是直接系统调用(您可能是),则sleep返回-1并且errno = EINTR。