是否可以阻止 PID 被重复使用?
例如,如果我运行一份工作myjob
在背景中myjob &
,并使用获取PIDPID=$!
,是否可以阻止 linux 系统重新使用该 PID,直到我检查该 PID 不再存在(进程已完成)?
换句话说,我想做类似的事情:
myjob &
PID=$!
do_not_use_this_pid $PID
wait $PID
allow_use_of_this_pid $PID
在上面给出的示例中,想要这样做的原因没有多大意义,但请考虑连续启动多个后台作业,然后等待它们全部完成。
一些程序员正确地指出,没有两个进程可以共享相同的 PID。这是正确的,但不是我在这里问的。我正在寻求一种方法来防止在使用特定 PID 启动进程后重新使用 PID。然后还有一种在我使用完它后重新启用它的使用的方法,以检查我的原始过程是否完成。
由于已被要求,这里是一个用例:
- 启动多个后台作业
- 获取后台作业的PID
- 防止后台作业终止后 PID 被另一个进程重复使用
- 检查“后台作业”的 PID - 即确保后台作业完成
- [注意,如果禁用后台作业 PID 的 PID 重用,则后台进程终止后启动的新进程将无法使用这些 PID]*
- 重新启用后台作业的 PID
- repeat
*进一步说明:
- 假设推出 10 个职位
- 作业 5 退出
- 由另一个用户启动的新进程,例如,他们登录到 tty
- 新进程与作业 5 具有相同的 PID!
- 现在我们的脚本检查 Job 5 是否终止,但看到 tty 正在使用 PID!
您无法“阻止”内核重用 PID。但是,我倾向于认为这对您来说并不是真正的问题。
但请考虑连续启动多个后台作业,然后等待它们全部完成。
一个简单的wait
(不带参数)将等待所有子进程完成。所以,您无需担心
PID 被重用。
当您启动多个后台进程时,PID 确实有可能被其他进程重用。
但这不是问题,因为你不能wait
除非它是您的子进程,否则在进程上。
否则,检查您启动的后台作业之一是否通过除wait
总是会变得不可靠。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)