Я пишу программу, которая создает два процесса непосредственно из родителя. Мой ожидаемый результат выглядитC Создание дочернего процесса
Main programs process ID: 2834
Child 2 (ID: 2836) Start Sequence at: 23
Child 1 (ID: 2835) Start Sequence at: 20
Мой фактический выход
Main programs process ID: 2834
Child 2 (ID: 2834) Start Sequence at: 23
Child 1 (ID: 2835) Start Sequence at: 20
Мой код
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
int main(int argc, char *argv[])
{
pid_t pid;
int n;
if (argc == 1) {
fprintf(stderr,"Usage: ./a.out <starting value>\n");
return -1;
}
n = atoi(argv[1]);
int p_pid;
p_pid = getpid();
printf("Main programs process ID: %d\n", p_pid);
pid = fork();
if(pid == 0){
int c1;
c1 = getpid();
printf("Child 1 (ID: %d) Start Sequence at: %d\n", c1, n);
}
if(pid != 0){
int c2;
c2 = getpid();
printf("Child 2 (ID: %d) Start Sequence at: %d\n", c2, n+3);
}
return 0;
}
Я получаю правильный процесс ребенка 1, но не правильный процесс ребенка 2. Что я делаю неправильно или как я могу исправить эту проблему?
код имеет только один вызов 'fork()', поэтому создается только один дочерний элемент. – user3629249
ПРИМЕЧАНИЕ: функция: 'fork()' имеет три (3) вида возвращаемых значений. Опубликованный код проверяет только возврат '== 0', а затем предполагает, что ошибки не было. Это очень плохая практика программирования, чтобы не проверить ошибки. – user3629249
основной процесс (родительский) не должен возвращаться, пока все дети не выйдут. Следовательно, родитель должен вызывать 'wait()' или better 'waitpid()' для каждого дочернего элемента до выхода родителя. – user3629249