3つのプロセスを作成し、それらの作業を同期させたいと思います。具体的には、最初のプロセスが2番目、2番目が3番目で待機するようにします。基本的に、作成されたのとは逆の順序で実行します。
これが私がこれまでにしたことです。
for (; i < 3 ; i++){
pids[i] = fork();
if (pids[i] == 0)
break;
}
if (pids[i] != 0){
wait(); // Main thread has to wait..
}
else{
if (i == 0){
waitpid(pids[1], &status, 0);
printProcessInfo(0);
}
else if (i == 1){
waitpid(pids[2], &status, 0);
printProcessInfo(1);
}
else if (i == 2){
printProcessInfo(2);
}
}
子プロセスで正しいiを取得すると想定しているため、iを使用して自分がどの子プロセスにいるかを確認しています。したがって、i = 0の場合、実際には最初の子にいます。この仮定は本当ですか?いずれにせよ、私は希望する順序を取得できません。実際、プロセスは、私が行ったwaitpid呼び出しをバイパスして、自然な順序で実行されます。何か案は?