【问题标题】:Get child list of parent process in C在C中获取父进程的子列表
【发布时间】:2015-01-03 13:31:50
【问题描述】:

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

【问题讨论】:

  • 你为什么要问?真正的用例是什么?请编辑您的问题以改进它!

标签: c linux process


【解决方案1】:

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

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

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

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

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

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

【讨论】:

  • fork() 创建新进程,对吗?但就我而言,我已经有了孩子,我只需要分析他们
  • 它是你的程序有孩子。因此,您编写了程序,并且(可能间接地)编写了fork 的调用,这是您的程序可以拥有子进程的唯一方法。你需要改进你的程序来管理你的子进程的所有 pid。
  • 好吧,我的程序生成了一个孩子,这个孩子必须是一个 shell(bash、sh 等)。从 bash 用户可以运行更多进程。所以我的问题是获取bash 将调用的进程的PID。
  • 这些不是您的进程的子进程。最多是孙子。
  • killpg 正是我要找的
猜你喜欢
  • 2016-01-20
  • 2020-10-03
  • 2017-05-23
  • 2011-07-16
  • 1970-01-01
  • 1970-01-01
  • 2013-07-18
  • 1970-01-01
相关资源
最近更新 更多