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

时间:2015-01-03 13:31:50

标签: c linux process

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

1 个答案:

答案 0 :(得分:1)

您应该明确显示您子进程的所有pid(fork(2) ...的结果)(并在使用wait(2)等成功等待后删除pid ...)

您可以选择保留这些数据的数据结构。

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

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

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

您可能也会对process groups和会话感兴趣。请参阅setpgrp(2)setsid(2)daemon(3)credentials(7)等。请注意,使用负值或零pid kill(2)可以向进程组发送信号,并且您也可以使用killpg(2)来实现此目的。