我的 c++ 程序将使用 fork() 和 execv() 生成几个子进程。如何查询这些进程?如果我想关闭一个,我会怎么做?
问问题
929 次
3 回答
5
当你 时fork
,子进程的返回值为0,父进程的子进程ID(pid)。
然后,您可以kill
使用该 pid 调用以查看它是否仍在运行,或请求关闭。要检查进程是否正在运行,请使用 0 作为信号,然后检查返回值(0 == 正在运行;-1 == 未运行)。要请求关闭,请SIGTERM
用作信号。
于 2011-04-26T04:04:57.007 回答
1
在 a 之后,我所知道的在进程之间进行通信的最佳方式可能fork()
是通过套接字(参见socketpair())。
从那里,您可能只需定义一个通信协议(包括终止请求)就可以使任何工作。
于 2011-04-26T04:05:36.033 回答
0
调用 后fork()
,您可以使用wait(&status_int)
或waitpid(child_pid, &status_int, WNOHANG)
来检测孩子的返回状态,如果您不想阻止等待孩子,请使用后者。传递的参数&status_int
将是一个指针,该指针int
将在子进程退出后保存子进程的返回状态。如果您想等待任何分叉进程完成,并且不关心返回值,您可以简单地调用wait(NULL)
. 或非阻塞版本waitpid(-1, NULL, WNOHANG)
.
于 2011-04-26T04:17:36.423 回答