【发布时间】:2016-04-28 23:56:43
【问题描述】:
我正在寻找一个接受 pgid(进程组 ID)并返回该进程组是运行还是停止的 C 函数。
【问题讨论】:
标签: process signals system-calls
我正在寻找一个接受 pgid(进程组 ID)并返回该进程组是运行还是停止的 C 函数。
【问题讨论】:
标签: process signals system-calls
一般方法是将waitpid() 与WNOHANG 选项一起使用。 waitpid(pid, &status, WNOHANG) 等待由pid 标识的子进程或进程组更改状态。
如果没有WNOHANG 选项,该函数将阻塞调用进程,直到进程组更改状态。包含该选项可确保 waitpid 在没有子级更改状态时返回 0 的值。 (如果状态发生变化,该函数返回pid。)您可以检查不同的状态变化,例如终止、捕捉停止信号、捕捉恢复信号等。
pid_t pid, w;
int status;
/* A call to fork, perhaps
* (pid is set to child's)
*/
/* Parent can check for child's termination */
w = waitpid(pid, &status, WNOHANG);
if (w == -1)
handle_error("waitpid_error");
if (w == 0)
printf("child still running\n");
else
printf("child exited\n");
请注意,如果子进程终止,则对 waitpid 的调用将获取子进程。
【讨论】:
waitpid 不会以任何方式影响任何目标进程(除非它们自行终止),它只会获取有关它们的信息。我进行了一些搜索,如果您使用的是 Linux 系统并想要潜在的替代方案,您可能需要查看 /proc。