2010-11-30 143 views
4

我无法让我的程序睡眠()后使用kill(pid,SIGTERM) 我该怎么办?睡眠后死亡

的代码我使用:

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后的第一个睡眠?

回答

6

由于收到信号,您的sleep()呼叫可能会提前终止。检查返回值。如果结果是肯定的,那么您可能需要再次使用sleep()。从http://www.manpagez.com/man/3/Sleep/

如果睡眠()函数返回,因为请求的时间已过, 返回的值将是零。 如果睡眠()函数返回由于 所述的信号的传送,返回的​​值将是在几秒钟的unslept量 (所请求的时间减去时间实际上睡)

3

那么除非你处理信号,否则SIGTERM就是死亡。

如果其发送睡眠信号的另一进程或线程返回EINTR。

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

+0

由于某种原因发送后使用原始处理程序使用SIGTERM杀死,我无法使用睡眠功能。我设法使用它之前,但不杀之后...... 你知道为什么会发生这种情况吗? kill(PID_of_Process_to_be_killed,SIGTERM);睡眠(5); - >这不起作用 sleep(5); - >这个工作 – 2010-11-30 22:29:21

+0

ERRNO包含什么?睡眠返回什么? – Joshua 2010-11-30 22:33:04