2010-11-30 180 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