【问题标题】:Process tree, how to find if a said process is the root one?进程树,如何查找所述进程是否是根进程?
【发布时间】:2011-04-13 13:08:52
【问题描述】:

我有一个目录监控应用程序,它通过启动新进程递归地工作。

我想知道我是否是这棵树中的“根”进程。我想过尝试获取调用者进程的名称并检查它是否与argv[0]相同。

有更聪明的方法吗?请记住,这是一个 Linux 应用。

请记住,我没有太多时间,而且我只是一名学生,所以一个简单的解决方案会很棒。

感谢您的宝贵时间。

【问题讨论】:

  • 更好地指定进程树的根。 Unix下总是PID为1的进程。
  • 错误,root 将是用户运行的流程实例。

标签: c linux process tree


【解决方案1】:

如果您使用fork() 创建新进程,则可以将局部变量初始设置为零,每个子变量在分叉后立即设置为 1。只有根进程在分叉后仍将其设置为零。

您甚至可以在每次分叉后增加它,这会让您知道每个进程在进程树中的深度。

编辑:

如果您无法使用此功能(例如,因为您在 fork 之后执行了 exec()),您可以使用 shell 用于将信息传递给您启动的程序的任何常见方式:

  • 环境变量:在fork()之后但在exec()之前调用setenv() - 或者在调用exec()时将其添加到环境中。

  • 使用特殊的命令行参数。

  • 在执行exec() 时为argv[0] 使用特殊值。

【讨论】:

  • 不适用,我混合使用 exec 和 fork。还是谢谢你。
【解决方案2】:

您是否可以添加一个表示“我不是根”的参数?这似乎是最简单的方法。

【讨论】:

    【解决方案3】:

    如果您正在调用 exec,请添加一个特殊参数或名为“I_AM_NOT_THE_ROOT”的环境变量,子进程可以获得,但父进程没有。

    我最近为此使用了命令行参数,但环境变量可能更方便。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-31
      • 1970-01-01
      • 1970-01-01
      • 2014-08-31
      • 2021-11-08
      相关资源
      最近更新 更多