0
我無法弄清楚這段代碼有什麼問題。這是一個Linux的盒子上的C.從c子進程中獲取退出狀態
它應該做的是殺死我創建的所有子進程,等待all退出,然後用pid,進程號(我創建)爲每個子進程打印一行,並且信號編號(應該是殺死9人)。
那麼我做錯了什麼?
void onalarm(int signo) {
int status[numberOfCores];
printf("Recieved alarm signal\n");
int cpu;
for (cpu = 0; cpu < numberOfCores; cpu++) {
kill(child_pid[cpu], SIGKILL);
}
for (cpu=0;cpu <numberOfCores;cpu++){
waitpid(-1, &status[numberOfCores],0);
}
for (cpu=0;cpu < numberOfCores;cpu++){
printf("pid = %i %ith child killed with signal ",child_pid[cpu],cpu);
printf("%i %s\n", WTERMSIG(status[cpu]), strsignal(WTERMSIG(status[cpu])));
}
exit(0);
不應該在殺死後的第一個for循環中執行'waitpid'嗎? –
當你運行它會發生什麼? – user3553031
現在它只是我所期望的。它發送kill信號,然後waitpid等待它們全部退出,並將退出狀態保存到狀態數組中。使用kill數組之外的waitpid,它會將kill發送給所有子進程,然後等待它們全部退出,如果它位於第一個循環內部,它最終會做同樣的事情。唯一的問題是如果一個小孩在離開killpid循環後退出。但這是一次課堂練習,而且我們是這樣做的。 – user3088814