void doWork(){
int fd[2];
int pret = pipe(fd);
close(0);
close(1);
int dret = dup2(fd[1], 1);
close(fd[1]);
while(1){
char buf[256];
system("whoami");
int rret = read(fd[0], buf, 256);
if(/* something interesting */){
return;
}
}
}
int main(int argc, char* argv[]){
int children = 2;
for(unsigned work = 0; work < children; ++work){
pid_t pid = fork();
if(pid == 0){
doWork();
break;
}
}
int status;
wait(&status);
return 0;
}
この例で何が問題になっていますか?私は、外部プログラムを呼び出すために各子プロセスを持っていて、パイプからそのプログラムの出力を読み込もうとしています。私のコードは、子供が1に設定されている場合にのみ機能します。並列フォークパイプ
EDIT:私はフォーク/パイプでタスク並列性を達成しようとしています。親プロセスと子プロセスの間に通信はありません。各子プロセスは外部プログラムを実行し、出力を読み込み、出力を処理し、目的の出力が見つかるまで続けます。
何人かの子供には何が問題ですか?あなたはその行動を説明できますか? –
私は前に言ったことを取り戻します。複数の子プロセスではうまく動作します。問題は、2つ以上の子プロセスでは、プログラムの処理時間が長くても非常に時間がかかりますが、1つの子プロセスでは数秒しかかかりません。私はSunOS 5.10で実行しています。多分それはそれと関係がありますか? – Arlen