Дочерний процесс запускается после родительского процесса
у меня есть простой код для тестирования
2 ответов
объяснение простое.
Планирование процессов зависит от ядра. Если это одноядерный процессор, то в этом запуске он решил приостановить дочернее выполнение и разрешить родительскому процессу работать первым. Родитель пробежал несколько циклов, прежде чем его отстранили в пользу ребенка, и так далее.
В многопроцессорной системе оба процесса могут работать в тандеме, но консольное устройство будет чередовать выход в зависимости от времени прерываний.
нет никакой гарантии другой запуск приведет к тому же результату. Также нет гарантии, что другая версия ядра не будет делать что-то другое.
Если вы хотите, чтобы процессы чередовались между циклами, настало время узнать межпроцессное взаимодействие.
основной процесс не отказывается от управления сразу, и цикл for выполняется так быстро, что это делается до того, как второй процесс будет запланирован. Когда я выполняю ваш код, я получаю непоследовательные отпечатки, но поведение зависит от системы.
это иногда помогает бросить sleep()
команды вокруг, когда вы играете с fork()
. Попробуйте этот код...
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#define MAX_COUNT 10
int main(void)
{
pid_t pid;
int i;
fork();
pid = getpid();
srand(pid); // Make sure each process has a different seed
for(i = 1; i <= MAX_COUNT; i++)
{
printf("PID = %d, i = %d\n", pid, i);
// Sleep 1-3 seconds.
unsigned int sleep_seconds = rand() % 3 + 1;
sleep(sleep_seconds);
}
}