Я пытаюсь провести простой тест, чтобы увидеть, работают ли процессы одновременно.
Вот что у меня есть на данный момент:
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 (дочерний случай), который просто спит и печатает свой собственный pid. - person kaylum   schedule 10.02.2016