2011-06-17 61 views
4

在C++中使用fork系統調用時,如果執行應執行的任務需要太多時間才能終止子進程,那麼最簡單的方法是什麼?如果花費太多時間就會終止子進程

如果它以某種方式進入無限循環......父進程應該如何設置子進程的超時值?

+0

有更好的選擇:修復無限循環。 – 2011-06-17 12:47:44

回答

5

使用WNOHANGwaitpid並睡在中間。像這樣的東西應該這樣做:

while (times < max_times) { 
    sleep(5); /* sleep 5 seconds */ 
    rc = waitpid(-1, &status, WNOHANG); 
    if (rc < 0) { 
     perror("waitpid"); 
     exit(1); 
    } 
    if (WIFEXITED(status) || WIFSIGNALED(status)) { 
     /* it's done */ 
     break; 
    } 
    times++; 
} 

if (times == max_times) { 
    /* ... */ 
}