我的c ++程序将使用fork()和execv()生成几个子进程。我该如何查询这些流程?如果我想关闭一个,我该怎么做?
答案 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>