今天又遭遇一個新的問題了…
今天在我的程式裡面加了這麼一段程式碼,
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
謹記於此。
請先 登入 以發表留言。