2010-09-27 19 views
0

如何殺死一個子進程發送一個帶有鍵擊的中斷,然後發送一個信號給父進程已被殺死的子進程?信號確認

回答

2

無論孩子何時死亡,父進程通常會收到一個信號。這是SIGCHLD信號。

這個信號可以被父進程阻塞,但否則當孩子出於任何原因退出時它總是被傳遞。父母可以通過使用wait系列之一(又名wait,wait3, wait4waitpid)來獲知退回代碼的原因。

0

讓子進程獲得焦點可能是一個挑戰,以便它獲得鍵盤事件。

您始終可以使用kill命令向給定進程發送信號。不要讓名稱誤導你,你可以發送任何帶有kill的信號,kill -SIGNUM pid,但是SIGTERM是默認值,通常會導致進程退出。

所以,如果你想發送一個信號SEGV處理11你會做

kill -SEGV 11 

你可以設置父捕捉的信號,通過調用它重新發送給孩子殺(2),然後等待孩子使用waitpid退出。

父的信號處理想的東西,像這樣:

int status; 
kill(child_pid, SIG_TO_SEND);/*send to child*/ 
waitpid(child_pid, &status);/* wait for child to give up */ 

如果你是認真的關於保持父了,知道信號是隻爲你可能在父設置一個變量的孩子,離開信號處理程序,然後完成發送和等待孩子的工作。一般來說,儘可能快地擺脫信號處理程序是件好事。