[英]About wait() and waitpid()
因此,我在C上編寫了這段代碼。我創建了一個父親,它有兩個子進程,一個變成了僵屍。 一秒鍾后,它退出了,等待他的父親結束了。 另一個子進程保持孤立狀態,然后完成。 我的問題是,如果我改變了會發生什么wait
的waitpid
。
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>
int main() {
pid_t pid;
int status, value;
pid = fork();
if (pid > 0) { // Father
pid = fork();
if (pid > 0) { // Father
wait(&status);
value = WEXITSTATUS(status);
if (value == 2)
printf("Child 2");
else if (value == 3)
printf("Child 1");
} else if (pid == 0) { //Child 2 - Orphan
sleep(4);
exit(2);
} else {
exit(1);
}
} else if (pid == 0) { // Child 1 - Zombie
sleep(1);
exit(3);
} else {
printf("Error al ejecutar el fork");
exit(1);
}
return 0;
}
引用wait / waitpid ,
提供waitpid()函數的原因有以下三個:
支持工作控制
允許使用非阻塞版本的wait()函數
允許庫例程(例如system()或pclose())等待其子進程而不會干擾該進程尚未等待的其他終止子進程
和
如果pid參數為(pid_t)-1並且options參數為0,則waitpid()函數應等效於wait()。否則,其行為應由pid和options參數的值修改。
因此,waitpid()的行為取決於其參數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.