进程树,如何查找所述进程是否为根进程?

时间:2011-04-13 13:08:52

标签: c linux process tree

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

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

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

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

感谢您的时间。

3 个答案:

答案 0 :(得分:5)

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

你甚至可以在每个fork之后增加它,这会让你知道每个进程在你的进程树中有多深。

编辑:

如果你不能使用它(例如因为你在fork之后做exec()),你可以使用shell用来将信息传递给你启动的程序的任何常用方法:

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

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

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

答案 1 :(得分:2)

你有可能添加一个含义“我不是根”的论据吗?这似乎是最简单的方法。

答案 2 :(得分:1)

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

我最近使用了一个命令行参数,但env变量可能更方便。