Я пытаюсь понять, как и действительно ли waitpid () с использованием WNOHANG очищает ресурсы дочернего элемента, которого он должен ждать?
#include <stdio.h>
#include <unistd.h>
#include <sys/wait.h>
int main() {
printf("Hello from start\n");
int pid;
if((pid = fork()) == 0){
printf("Hello from child: %d\n", getpid());
printf("My parent PID is: %d\n", getppid());
}else if(pid > 0){
printf("Hello from parent: %d\n", getpid());
int status;
waitpid(pid, &status, WNOHANG);
}else{
perror("ERROR");
}
printf("Outside if statement, pid is: %d\n", getpid());
}
Выход для дочернего процесса для родительского PID: 1 означает родительский процесс завершен, и дочерний процесс был зомбирован ie передан процессу инициализации.
Из того, что я понял WNOHANG в описании человека, он должен возвращать, был ли дочерний процесс завершен во время его тестирования, и позволить родительскому процессу продолжаться. Однако я подумал, что если родитель собирался завершить работу до своего дочернего элемента, он будет ждать, пока дочерний элемент «очистит его». Из этого кажется, что родитель просто продолжает работу и завершает работу, не очищая. 1008 *
Спасибо!