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

问题描述

| 我有一个目录监视应用程序,它通过启动新进程来递归工作。 我想知道我是否是该树中的“ root”进程。我考虑过尝试获取调用者进程的名称,并检查它是否与
argv[0]
相同。 有更聪明的方法吗?请记住,这是一个Linux应用程序。 请记住,我没有太多时间来做,而我只是一个学生,所以一个简单的解决方案将是很好的。 谢谢你的时间。     

解决方法

如果使用“ 1”来创建新进程,则可以将局部变量初始设置为零,然后将每个子代在分叉后立即设置为1。分叉后,只有根进程仍将其设置为零。 您甚至可以在每个分支之后增加它,这将使您知道每个进程在进程树中的深度。 编辑: 如果您不能使用此命令(例如,因为在执行分叉操作后进行了
exec()
操作),则可以使用Shell用来将信息传递给您启动的程序的任何常用方式: 环境变量:在
fork()
之后但在
exec()
之前调用
setenv()
-或在调用
exec()
时将其添加到环境中。 使用特殊的命令行参数。 进行
exec()
时,请对
argv[0]
使用一个特殊的值。     ,您是否有可能添加一个表示“我不是根”的参数?这似乎是最简单的方法。     ,如果要调用exec,请添加一个特殊的参数或名为\“ I_AM_NOT_THE_ROOT \”的环境变量,子进程将获得该参数,而父进程则不会。 我最近为此使用了命令行参数,但是env变量可能更方便。