1
嗨的狀態是有點新的C programming.I有以下一段代碼,基本程序需要檢查子進程的狀態和家長等到孩子終止,然後打印「孩子已終止「。但是我嘗試了WNOHANG,但不知何故,我的第二次檢查沒有成功,或者我無法阻止子進程。任何想法的傢伙?提前致謝。檢查子進程
代碼:
#include<stdio.h>
#include<unistd.h>
#include<stdlib.h>
#include <sys/types.h>
#include <sys/wait.h>
int main()
{
int pid;
int ppid;
int status;
pid=vfork();
pid_t return_pid = waitpid(pid, &status, WNOHANG);
if (pid<0) {
printf("\n Error ");
exit(1);
} else if (pid==0) {
printf("\n Hello I am the child process ");
printf("\n My pid is %d %d ",return_pid, getpid());
exit(0);
} else if (return_pid == pid) {
printf("child is finished %d %d", return_pid, pid);
exit(0);
} else {
printf("\n Hello I am the parent process %d %d", return_pid, pid);
printf("\n My actual pid is %d %d \n ",return_pid, getpid());
exit(1);
}
}
作爲一個側面說明,從'的vfork()'手冊頁:「_The孩子不能從當前函數返回或者調用exit(3),但可以調用_exit(2)._」你不準'退出「在孩子的第三行。 – DyZ
並且對'vfork的其他限制()'太 - 調用'waitpid函數()'是無效的。在我的書中,'vfork()'限制性太強,無法使用;我從不使用它。 –
我想你應該在這裏使用fork而不是vfork。使用vfork,父進程被暫停,直到孩子完成,所以你的父母真的沒有什麼需要檢查的地方,這裏沒有任何並行性。用叉子,父母和孩子都可以並行運行,所以父母的檢查是有趣且有用的。這聽起來像是任務的重點:嘗試並行。 – ScottK