使用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?
答案 0 :(得分:6)
由于收到信号,您的sleep()
电话可能会提前终止。检查返回值。如果是肯定的,您可能希望再次sleep()
该值。来自http://www.manpagez.com/man/3/Sleep/:
如果sleep()函数因为请求的时间已经过去而返回, 返回的值将为零。 如果sleep()函数返回原因 在发送信号时,返回的值将是未记录的金额 (请求的时间减去实际睡觉的时间),以秒为单位
答案 1 :(得分:3)
除非你处理信号,否则SIGTERM就会死亡。
如果发送信号sleep的另一个进程或线程返回EINTR。
如果您使用标准库而不是直接系统调用(您可能是),则sleep返回-1并且errno = EINTR。