子プロセスを開始しようとしていて、パイプを介してコマンドを送信しています。そして、私が知らない概念が恋しいと思います。
最初のコマンド送信は成功し、もう 1 つは失敗し、無限ループになりました。そして、私はその理由を理解していません。
親.c
int invoke_proc(int out_tube[2]) {
pid_t pid;
int rv;
int tube[2];
if(pipe (tube)) {
fprintf(stderr, "pipe");
exit(1);
}
pid = fork();
if (pid == -1) {
fprintf(stderr, "fork");
exit(1);
}
// parent
if(pid) {
close(tube[0]);
out_tube[1] = tube[1];
}
// child
else {
close(tube[1]);
dup2(tube[0], 0);
execl("child", "child", NULL);
}
return 0;
}
int main() {
int tube[2];
//for (int i = 0; i < 2; i++) {
invoke_proc(tube);
sleep(2);
write(tube[1], "allo\n", 7);
printf("!\n");
sleep(5);
write(tube[1], "bye bye\n", 10);
printf("!\n");
sleep(5);
write(tube[1], "exit\n", 10);
printf("!\n");
close(tube[1]);
//}
return 0;
}
child.c
int main() {
char string[100];
printf("Child Process: [%d]\n", getpid());
printf("-------------\n");
do{
printf("Enter Command: ");
fflush(stdout);
fgets(string, 100, stdin);
printf("[%s]\n",string);
} while(strcmp(string, "exit"));
return 0;
}
出力は次のとおりです。
-bash-4.1$ ./parent 子プロセス: [61983]
コマンドを入力してください: [allo
]
!
コマンドを入力してください: !
[]
コマンドを入力してください: ^C
-bash-4.1$
プロセスを終了しました。そうしないと、この後に無限ループが発生します。
同様の質問を読んでいますが、答えが見つかりません。できれば、できるだけ簡単に答えてください。
ありがとう。
追伸 はい、これは学校の課題です。私の目標は、同じコマンドを複数の子に送信することです。しかし、私は最初にこのステップから抜け出そうとしています。