gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:54:18 24 4
gpt4 key购买 nike

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

最佳答案

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

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

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

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

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

您可能还对 process groups 感兴趣和 session 。参见 setpgrp(2) , setsid(2) , daemon(3) , credentials(7)等。请注意,pid 为负数或零时 kill(2)可以向进程组发送信号,你也可以使用 killpg(2)为此目的。

关于c - 在C中获取父进程的子列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27755420/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com