在C中获取父进程的子列表

Get child list of parent process in C

我有一个可能包含子进程的 PID。如何获取所有子进程的PID?我制作了自己的 PTY 处理程序,因此当用户在此处理程序中运行 shell 时,他可能会运行更多程序(直接来自 shell),每个运行的程序都成为 shell 的子程序。所以,当我按下 Ctrl+C 时,我需要向最新的进程发送信号,所以需要知道最后一个进程的 PID。

你应该显式所有的pid(fork(2)...) of your child processes (and remove a pid once you waited it successfully with wait(2)等的结果...)

您可以选择数据结构来保存这些 pid。

任何其他方法(例如使用 proc(5)... pspstree 正在做的。)不是很便携且效率低下。

所以基本规则是,每次调用 fork 时,您都应该明确保留其结果(并测试 3 种情况:0 如果在子进程中,>0 如果在父进程中,<0 在错误)并在 wait 时使用它。

阅读Advanced Linux Programming;它有很多与该主题相关的页面。

您可能也对 process groups and sessions. See setpgrp(2), setsid(2), daemon(3), credentials(7) etc. Notice that with a negative or zero pid kill(2) can send a signal to a process group, and that you could also use killpg(2) 感兴趣。