プロセスを一時停止してプログラムを続行する方法があるかどうかを知りたいのですが。プロセスを一時停止してプログラムを続ける方法は?
をしかし、私はP4
を打ったときには、終了死に、その後、P2がP5を作成します。その後、P2 DiesとP1はP3を作成し、同じことがそこで起こります。
プロセスが終了する前に、全体のツリーを作成する必要があります。
wait
でもwaitpid()
でも使用することはできません。
P4を一時停止してその父親から続行する方法はありますか?
どうすれば目標を達成できますか?
現在のコード私:それはこの順序で作成しています:
P1 - > P2 - > P4 - > P4が死ぬ - > P5 - > P2が死ぬ - - > P3 - > P6> P5はDIES - > P6が死ぬ - > P7 - > P7が死ぬ - > P3が死ぬ - > P1あなただけに必要なので、
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/wait.h>
#include <time.h>
int main(){
clock_t t;
double time_taken;
t = clock();
int status;
pid_t idProcesso, pai;
printf("P1 created: %d\n", getpid());
idProcesso = fork();
switch(idProcesso)
{
case -1: exit(1);
case 0: //P2
printf("P2 created: %d - son of P1: %d\n", getpid(), getppid());
idProcesso = fork();
switch(idProcesso)
{
case -1: exit(1);
case 0: //P4
printf("P4 created: %d - son of P2: %d\n", getpid(), getppid());
sleep(1);
break;
default://P2
idProcesso = fork();
switch(idProcesso)
{
case -1: exit(1);
case 0://P5
printf("P5 created: %d - son of P2: %d\n", getpid(), getppid());
break;
default://P2
sleep(1);
break;
}
break;
}
break;
default:
idProcesso = fork();
switch(idProcesso)
{
case -1: exit(1);
case 0://P3
printf("P3 created: %d - son of P1: %d\n", getpid(), getppid());
idProcesso = fork();
switch(idProcesso)
{
case -1: exit(1);
case 0://P6
printf("P6 created: %d - son of P3: %d\n", getpid(), getppid());
sleep(1);
break;
default://P3
idProcesso = fork();
switch(idProcesso)
{
case -1: exit(1);
case 0://P7
printf("P7 created: %d - son of P3: %d\n", getpid(), getppid());
break;
default://P3
break;
}
sleep(1);
break;
}
break;
default:
sleep(4);
break;
}
break;
}
printf("Process id: %d terminated\n", getpid());
exit(0);
}
最近のLinuxでは、プロセスを再親子化することができます:http://stackoverflow.com/questions/6476452/process-re-parenting-controlling-who-is-the-new-parent –
7つのプロセスすべてが必要です同じ時間に走ったり、木を連続的に建てたりして、あなたが行くにつれて根や枝が枯れるでしょうか? p7は最後のプロセスであるべきですか? –
そしてなぜあなたはいくつかの従来の同期メカニズムを使用できませんか?パイプのように。 –