Я пытаюсь сделать простой тест, чтобы проверить, работают ли процессы одновременно.C Параллельные процессы
Вот то, что я до сих пор:
pid_t pids[argc-1];
pid_t pid;
for(i=1; i<argc; i++)
{
pid = fork();
if (pid > 0)
{
pids[i-1] = pid;
printf("process %d created\n", pid);
}
else
{
exit(0);
}
}
printf("Main Process\n");
for (i=0; i < argc - 1; i++)
{
int status;
wait(pids[i], &status, 0);
printf("Process %d finished\n", pids[i]);
}
Мой ARGC = 4 в этом случае, так это создает 3 дочерние процессы, именно то, что мне нужно.
Мой вопрос: как я могу быть уверен, что все процессы работают одновременно? Я пытался вызвать сон, но это не помогает, так как процессы создаются последовательно, и каждый сон заставляет их спать по одному. Я хотел, чтобы второй дочерний процесс спал (1), чтобы увидеть, будут ли другие два процесса печатать что-то, например, во время сна, но я не могу сделать это внутри цикла for.
Кроме того, почему «Основной процесс» напечатан только один раз? Разве не каждый процесс, после его завершения с циклом for, продолжает выполняться до выражения return? Я смущен этим.
Любая помощь будет высоко оценена.
Спасибо.
есть еще один 'for' цикл внутри первого' for' петли для 'PID == 0 ' case (child case), который просто спит и печатает свой собственный pid. – kaylum
После того, как вы раздвоены, порядок вывода является чисто случайным. – Koshinae