プログラムがwhileループを通してユーザー入力を継続的に受け取り、シェルスクリプトを実行しているときに各ループで現在のプログラムプロセスの新しい子をフォークするプログラムを作成しようとしています。これは私が現在持っているものです:Waitpidの使い方とBashスクリプティング
int main(int argc, char **argv)
{
while(!feof(stdin)){
printf("Port Number:");
fgets(portno, 100, stdin);
input[strlen(portno) - 1] = '\0';
pid_t pid = fork();
if (pid < 0){
die("fork did not work");
} else if (pid == 0){
fprintf(stderr, "[pid=%d] ", (int)getpid());
fprintf(stderr, "process started on port %s\n", portno);
execl("./netcattest.sh", "netcattest.sh", portno, (char *)0);
die("program failed");
} else {
/*
if (waitpid(.... NEED HELP ON THIS PART
*/
fprintf(stderr, "[pid=%d] ", (int)pid);
fprintf(stderr, "program terminated\n");
}
}
return 0;
}
私の問題は、waitpidのドキュメントを読んでいる、私は少し機能を使用する方法については不明です。私がしたいのは、プログラムが親プロセスであり、現在終了しているすべてのプロセスを何とか識別できるようにしたいということです。
たとえば、ループを3回実行し、2番目のループの後のどこかで最初のプロセスが終了すると、何とか終了したプロセスのPIDを特定できるようにしたいと考えています。
私はそれがWNOHANGオプションを使用することを知っていますが、実際にはどのように動作するのかは本当に混乱しています。
大変ありがとうございます。
EDIT:また、各行を個別に区切るのではなく、コードの4つのインデントを素早く行う方法はありますか?
はい、コードを選択し、 '{}'アイコンをクリックしてください。 –
マイケルありがとう! – KWJ2104