在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)... ps
和 pstree
正在做的。)不是很便携且效率低下。
所以基本规则是,每次调用 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) 感兴趣。
我有一个可能包含子进程的 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)... ps
和 pstree
正在做的。)不是很便携且效率低下。
所以基本规则是,每次调用 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) 感兴趣。