学習目的のために、私はゾンビプロセスを生成するコードを書いた。私の仮定でExit()を呼び出すがゾンビにならない子プロセス
#include <sys/types.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
pid_t pid;
int main() {
pid = fork();
if (pid == 0) {
exit(0);
} else {
printf("the child process is %d", pid);
sleep(20);
}
}
、上記のコードは、このような方法で動作する必要があります:ここにコードされた子プロセスは、ステータスコード0と0のpid
とexit
を受け取るには、親プロセスは子プロセスのpid
を受け取り、それをプリントアウトして20秒間スリープ状態になります。子プロセスがexit
のときは、親プロセスがwait
を呼び出さないため、子プロセスは約20秒間ゾンビでなければなりません。
しかし、コードを実行すると、約20秒間待機して、子プロセスのpidを出力します。 20秒で、ゾンビプロセスとしてps -l
に子プロセスが表示されません。
コードの理解と実際の動作の違いは何ですか?
P.S.私はMac OS Sierraを使用しています。
printfに新しい行 "\ n"を追加してみてください。stdoutはバッファされています。 – technosaurus
"\ n"を追加するとメッセージを印刷できます。ありがとうございます!しかし、子プロセスはまだゾンビにはならない。 – Musen