#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main (int argc, char *argv[]) {
pid_t childpid = 0;
int i, n;
if (argc != 2){
fprintf(stderr, "Usage: %s processes\n", argv[0]);
return 1;
}
n = atoi(argv[1]);
for (i = 1; i < n; i++)
if (childpid = fork())
break;
if (childpid>0){ // parent process
while (i>1) {
wait(NULL);
i--;
}
}
fprintf(stderr, "i:%d process ID:%ld parent ID:%ld child ID:%ld\n",
i, (long)getpid(), (long)getppid(), (long)childpid);
return 0;
}
すべての子プロセスがこのコードで終了した後に、プロセス情報(親)をどのように印刷できますか。子プロセスが終了した後、親プロセスを実行する方法は?
出力:
i:1 process ID:2313 parent ID:2307 child ID:2314
i:3 process ID:2315 parent ID:2314 child ID:0
i:1 process ID:2314 parent ID:1 child ID:2315
私が最初に終了した子プロセスを必要とし、その後親プロセスは、そのプロセス情報を印刷する必要があります。
正しい。しかし、必ずしも間違っているとは限りません。それは、必要とされるプロセス構造に依存します。それが現れたとき、親は子を作成します。これは壮大な子を作成します。偉大な巨大な子を作成します...あなたの代わりに、親プロセスの兄弟の子プロセスが作成されます。どちらも正しいですか(どちらかが正しい) - それがあなたが望むものならば。 –
@JonathanLeffler質問した質問のもう1つの側面を説明していただきありがとうございます。この質問には、「すべての**子プロセスがこのコードで終了した後にプロセス情報(親)を印刷する」という質問があるため、親プロセスと親子プロセスの子プロセスが考慮されています。しかし、私はあなたに完全に同意しています。どちらも正しいプロセス構造に依存しています。再度、感謝します。 –
あなたの答えは、私がしなかったオプションや代替品をカバーするので便利です。 –