私のプログラムは次のように表現しています。子供が分裂する親があり、この子は別の子を分けています。したがって、親、子、および子孫がある(すなわち、この子孫の親は子である)。プロセスを実行する前にサブチャイルドと親プロセスを待つ方法は?
子供はexeclp()でコマンドを実行します。子供が日付を単純にするとしましょう。サブチャイルドは同じことをします。
もちろん、子はコマンドを実行する前にサブファイルをフォークします。
子供が独自のコマンドを実行した後に、コマンドを実行するサブチャイルドを探しています。さらに、子供と子どもが彼らの命令を実行した後、私は親が自分のプロセスを続けることを望む。私は子供を行います(私は子供の実行のためのsubchild待ちをすることはできませんsubchild実行
- :
私は2つの問題を持っていますexeclpを使用しているときにそのPIDを失う)
ここに私の現在の実装である:?
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main (int argc, char **argv){
pid_t pid1, pid2;
pid1 = fork();
if (pid1 > 0)
{
int status;
// Wait child
printf("Parent waiting for child\n");
waitpid(pid1, &status, 0);
printf("Parent has waited child\n");
// Wait subchild
printf("Parent waiting for subchild\n");
// Wait sub-child here?
printf("Parent has waited subchild\n");
// End
printf("parent end\n");
}
else
{
pid2 = fork();
// Subchild
if (pid2 == 0) {
waitpid(getppid(), NULL, 0); // wait child? it doesn't work
execlp("/bin/date", "date", "+Subchild:\"%d-%m-%y\"", (char *) 0);
_exit(EXIT_FAILURE);
}
// Child
else {
execlp("/bin/date", "date", "+Child:\"%d-%m-%y\"", (char *) 0);
_exit(EXIT_FAILURE);
}
}
return 0;
}
私の二つの「問題」がライン21及び33
ある出力は以下の通りです:
Parent waiting for child
Subchild:"03-10-17"
Child:"03-10-17"
Parent has waited child
Parent waiting for subchild
Parent has waited subchild
parent end
subchildは早くそれができるように自分自身を実行...私は共有変数を使用してこれを解決したが、それ回避策のように感じられ、私はサブファミリーを待っている親に問題が残っていました。
あなたの質問の明確さにもかかわらず、アドバイスをするのは少し難しいです。順番に処理をしたい場合は、サブプロセスをフォークするのが間違った方法のように思えます。なぜフォーク?あなたはプロセスを分け合わせようとしていますが、逐次実行は何をしようとしていますか?プログラムを実行していない場合は、シグナルを使用して親プロセスグループとプロセスグループの間でやりとりすることができますが、実行するとそのオプションは失われます。 – Leonard
件名に関するもう1つの良い例は、[** man 2 wait **](https://linux.die.net/man/2/wait)です。 –
ありがとうございます。これは教育プログラムによく似ていますが、このアーキテクチャでは逐次実行を作成する方法を見つける必要があります。私はいくつかの解決策を試しましたが、exec()は非常に難しいと言いました(共有変数/セマフォ/ ...)。 – SugarMouse