问题描述
|
我有一个目录监视应用程序,它通过启动新进程来递归工作。
我想知道我是否是该树中的“ root”进程。我考虑过尝试获取调用者进程的名称,并检查它是否与
argv[0]
相同。
有更聪明的方法吗?请记住,这是一个Linux应用程序。
请记住,我没有太多时间来做,而我只是一个学生,所以一个简单的解决方案将是很好的。
谢谢你的时间。
解决方法
如果使用“ 1”来创建新进程,则可以将局部变量初始设置为零,然后将每个子代在分叉后立即设置为1。分叉后,只有根进程仍将其设置为零。
您甚至可以在每个分支之后增加它,这将使您知道每个进程在进程树中的深度。
编辑:
如果您不能使用此命令(例如,因为在执行分叉操作后进行了
exec()
操作),则可以使用Shell用来将信息传递给您启动的程序的任何常用方式:
环境变量:在fork()
之后但在exec()
之前调用setenv()
-或在调用exec()
时将其添加到环境中。
使用特殊的命令行参数。
进行exec()
时,请对argv[0]
使用一个特殊的值。
,您是否有可能添加一个表示“我不是根”的参数?这似乎是最简单的方法。
,如果要调用exec,请添加一个特殊的参数或名为\“ I_AM_NOT_THE_ROOT \”的环境变量,子进程将获得该参数,而父进程则不会。
我最近为此使用了命令行参数,但是env变量可能更方便。