通过wait来实现的。
#include <QCoreApplication> #include <stdio.h> #include <sys/stat.h> #include <sys/types.h> #include <unistd.h> #include <wait.h> #include <errno.h> #include <stdlib.h> #include <QDebug> struct test { int val; }; void waitprocess(); int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); waitprocess(); return a.exec(); } void waitprocess() { int count = 0; pid_t pid = fork(); int status = -1; if(pid < 0) { qWarning()<<"创建进程失败"; } else if(pid > 0) { qWarning()<<"父进程pid = "<<getpid(); wait(&status); //父进程执行到此,马上阻塞自己,直到有子进程结束。当发现有子进程结束时,就会回收它的资源。 int res = WEXITSTATUS(status); qWarning()<<"子进程状态:"<<res; if (res != 1) { qWarning()<<"子进程死了"; //下面可以进行其它操作了。 } sleep(1); } else { qWarning()<<"子进程pid = "<<getpid(); //下面可以放主程序,如果主程序死了,父进程就可以知道,并且做相关处理。 test* t; t->val = 5; exit(1); } }