通过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);
}
}