Я хотел бы знать, есть ли способ приостановить процесс, но продолжить программу.Как приостановить процесс и продолжить программу?
Мне нужно создать процессы, как это:
Но когда я ударил P4
заканчивается, умирает, а затем P2 создает P5. Тогда P2 Dies и P1 создают P3, и там происходит то же самое.
Мне нужно создать все «дерево», прежде чем процессы начнут умирать.
Нельзя использовать wait
или waitpid()
, потому что он нацелен только на сына.
Есть ли способ сделать паузу P4 и продолжить от ее отца?
Если я не могу, как я могу достичь своей цели?
Мои в настоящее время код: Это создает в таком порядке:
P1 -> P2 -> Р4 -> Р4 ШТАМПЫ -> Р5 -> Р5 ШТАМПЫ -> P2 ШТАМПЫ -> P3 -> P6 - > 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 должен быть последним процессом? –
И почему вы не можете использовать некоторые обычные механизмы синхронизации? Как трубы. –