だから私は、親プロセスが子プロセスに書き込み、子プロセスがすぐに戻ることができるように、2セットのパイプの作成を含むプログラムを書いています...
子プロセスに次のコードがあります。
if(pid==0){ //child process
cout << "executing child" << endl;
close(fd1[WRITE_END]);
close(fd2[READ_END]);
if(dup2(fd1[READ_END],STDIN_FILENO) < 0 || dup2(fd2[WRITE_END],STDOUT_FILENO) < 0){
cerr << "dup2 failed" << endl;
exit(1);
}
cout << "test output" << endl;
close(fd2[WRITE_END]);
close(fd1[READ_END]);
read(fd1[READ_END],buf,BUFFER_SIZE);
cout << "Child process read " << buf << endl;
execl("/bin/sort", "sort", "-nr", NULL);
} else { //... parent process
プログラムを実行すると、子プロセスからの出力として得られるのはexecuting child
no だけtest output
です。ただし、dup2 呼び出しを処理する if ステートメントを削除すると、出力にtest output
.
dup2 が原因で子プロセスが終了しない理由についてのアイデアはありますか?
(ちなみに、もともと、私の 2 つの dup2 は別々の if ステートメントで行われていました...テスト出力をテストの下に置くdup2(fd1[READ_END],STDIN_FILENO) < 0
と出力されますが、他の dup2 条件付きテストの下に置くと出力されないので、それが私の問題であると確信しています)
前もって感謝します