所以基本上我希望「cmd_limit」在秒內獲取一個數字,這是我們等待子進程(安全地假設只有一個)完成的最長時間。如果子進程在睡眠期間完成,我希望cmd_limit返回通過,而不運行cmd_limit代碼的其餘部分。任何人都可以幫助我做到這一點,這是我迄今爲止..C信號和進程
int cmd_limit(int limit, int pid) {
signal(SIGCHLD, child_died);
sleep(limit);
kill(pid, SIGKILL);
printf("killin'\n");
return PASS;
}
void child_died(int sig) {
int stat_loc; /* child return information */
int status; /* child return status */
waitpid(-1, &stat_loc, WNOHANG);
if(WIFEXITED(stat_loc)) { // program exited normally
status = WEXITSTATUS(stat_loc); /* get child exit status */
}
printf("child died: %s\n", signal);
}
你看過'alarm()'嗎? – 2010-04-23 12:33:30
我知道警報,但我不知道如何確保在使用警報睡眠期間可以從cmd_limit返回? – Gary 2010-04-23 12:46:01
'sleep'被不被忽略的信號中斷(詳細閱讀'sleep'手冊頁),如果這就是你想知道的。它還會返回中斷時的剩餘時間,如果不中斷則返回0。但是,您不應該在某些系統上混合調用「睡眠」和ALRM信號。 – outis 2010-04-23 14:17:06