в моем назначении Я должен ввести 'n' и создать 'n' количество дочерних процессов. Оттуда ребенок обрабатывает execl в другую программу, в которой они спят для случайного количества секунд (между 0 и 9), а затем выходят с статусом выхода случайного числа. Когда они выйдут из родителя, я должен напечатать идентификатор PID ребенка и статус выхода ребенка. Мои проблемы заключаются в том, что я не уверен, как получить статус PID или выйти из системы без использования IPC. Вместе с тем «Ребенок мертв ...» выходят одновременно. Это то, что я придумал сейчас.Получение значения PID и выхода из дочернего процесса
Родитель:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
int main()
{
char input[12];
int n, i, ch;
pid_t pid;
int status;
printf("Enter an integer: ");
fgets(input, 12, stdin);
if (input[10] == '\n' && input[11] == '\0') { while ((ch = fgetc(stdin)) != EOF && ch != '\n'); }
rmnewline(input);
n = atoi(input);
for(i=0; i<=n-1; i++)
{
pid = fork();
if(pid == 0)
execl("/home/andrew/USP_ASG2/sleep", "sleep", NULL);
}
while(wait(NULL)>0)
{
if(WIFEXITED(status))
{
int exitstat = WEXITSTATUS(status);
printf("Child %d is dead with exit status %d\n", pid, exitstat);
}
}
}
ребенок:
int main()
{
srand(time(NULL));
int r = rand() % 10;
printf("In child %d\n", getpid());
sleep(r);
exit(r);
}
выходной ток: Пара вещей, которые я заметил это "Ребенок мертв ..." выход все возвращаются в то же самое время. Когда они, безусловно, будут отличаться.
[email protected]:~/USP_ASG2$ ./q2
Enter an integer: 3
In child 15624
In child 15623
In child 15622
Child 15624 is dead with exit status 0
Child 15624 is dead with exit status 0
Child 15624 is dead with exit status 0
'статус' неинициализирован. Вам нужно передать указатель на него в 'wait'. – kaylum
1) Прочтите страницу руководства для 'wait'. 2) Прибыль. – user3386109
предложите использовать waitpid(), чтобы вы знали, какой ребенок вышел из него. – user3629249