今天又遭遇一個新的問題了…

今天在我的程式裡面加了這麼一段程式碼,

pid_t pid;

pid = fork();

if (pid == 0) {

  execlp("/bin/ping", "ping", "-c", "1", "8.8.8.8", NULL);

} else if (pid > 0){

  pid = waitpid(pid, &status, 0);

  // at this point, waitpid always returns -1 and status not changed at my case.

}

我一直覺得很困擾, parent真的會等child結束,但是就是永遠傳回-1。

perror("fork"); 

則是說no child process.

自己又寫了一個小程式,結果發現waitpid是正常的。

不過我本來的程式碼已經有些內容,不可能一項一項移過來測試。

在求助於同事的幫忙之下,發現原來

signal(SIGCHLD, SIG_IGN);

會造成waitpid return -1

謹記於此。

創作者介紹
創作者 荒廢的記事本 的頭像
jimmy899

荒廢的記事本

jimmy899 發表在 痞客邦 留言(0) 人氣( 587 )