如何在C ++中查询子进程

时间:2011-04-26 04:01:05

标签: c++ linux fork execv

我的c ++程序将使用fork()和execv()生成几个子进程。我该如何查询这些流程?如果我想关闭一个,我该怎么做?

3 个答案:

答案 0 :(得分:5)

当您fork时,子进程中的返回值为0,父进程中的子进程ID(pid)为。

然后,您可以使用该pid调用kill以查看它是否仍在运行,或请求关闭。要检查进程是否正在运行,请使用0作为信号,然后检查返回值(0 ==正在运行; -1 ==未运行)。要请求关机,请使用SIGTERM作为信号。

答案 1 :(得分:1)

我知道在fork()之后通过套接字在流程之间进行通信的最佳方式(参见socketpair())。

从那里,您可以通过定义通信协议(包括终止请求)来使任何工作正常工作。

答案 2 :(得分:0)

致电fork()后,您可以使用wait(&status_int)waitpid(child_pid, &status_int, WNOHANG)来检测儿童的返回状态,如果您不想阻止等待,请使用后者儿童。传递的参数&status_int将是一个指向int的指针,它将在退出后保存子进程的返回状态。如果您希望等待任何分叉流程完成,并且不关心返回值,则只需拨打wait(NULL)或非阻止版本waitpid(-1, NULL, WNOHANG)即可。 / p>