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

F. *_* P. 0 c linux tree process

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

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

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

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

谢谢你的时间.

thk*_*ala 5

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

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

编辑:

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

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

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

  • argv[0]这样做时使用特殊值exec().