Я пытаюсь использовать дочерние процессы при использовании fork()
для параллельной работы двух команд. Я делаю это с помощью следующего кода:Воспроизведение дочерних процессов при использовании fork()
int process() {
int w, status;
while ((w = waitpid(-1,&status,WNOHANG)) > 0)
fprintf(stderr,"Completed: %d (%d)\n",w,status);
int pid;
if ((pid = fork()) < 0)
errorExit (EXIT_FAILURE);
if (pid == 0) {
// run first command
} else if (cmdList->right) {
// run second command
}
}
Мое понимание этого кода, как это: Я бегу waitpid()
непрерывно thorughout во время выполнения программы и всякий раз, когда waitpid()
возвращает значение больше 0, то сообщает об этом (тем самым позволяя зомби умереть), а затем выполняет fprintf()
до stderr
. Является ли это понимание неправильным?
Цикл 'while' очистит всех мертвых детей до развилки (не дожидаясь, если таких детей нет). Возможно, вам понадобится сделать еще один подобный цикл в родительском процессе после fork. Немного тревожит, что 'w' и' status' являются глобальными переменными. –