是否可以阻止 PID 被重用?

例如,如果我使用 myjob 在后台运行作业 myjob & ,并使用 PID=$! 获取 PID,是否有可能阻止 linux 系统重新使用该 PID,直到我检查该 PID 不再存在(进程已完成) )?

换句话说,我想做一些类似的事情:

myjob &
PID=$!
do_not_use_this_pid $PID
wait $PID
allow_use_of_this_pid $PID

想要这样做的原因在上面给出的示例中没有多大意义,但可以考虑依次启动多个后台作业,然后等待它们全部完成。

一些程序员正确地指出,没有 2 个进程可以共享相同的 PID。这是正确的,但不是我在这里问的。我要求一种防止在使用特定 PID 启动进程后重新使用 PID 的方法。然后还有一种方法是在我用完之后重新启用它来检查我的原始过程是否完成。

既然已经被要求,这里是一个用例:
  • 启动多个后台作业
  • 获取后台作业的 PID
  • 防止 PID 在后台作业终止后被另一个进程重新使用
  • 检查“后台作业”的 PID - 即,确保后台作业完成
  • [注意,如果后台作业的 PID 禁用了 PID 重用,这些 PID 就不能被后台进程终止后启动的新进程使用]*
  • 重新启用后台作业的 PID
  • 重复

  • *进一步解释:
  • 假设启动了 10 个作业
  • 作业 5 退出
  • 由另一个用户启动的新进程,例如,他们登录到一个 tty
  • 新进程的 PID 与 Job 5 相同!
  • 现在我们的脚本检查作业 5 是否终止,但看到 tty 正在使用 PID!
  • 最佳答案

    您不能“阻止”PID 被内核重用。但是,我倾向于认为这对您来说并不是真正的问题。



    一个简单的 wait(不带参数)将等待所有子进程完成。因此,您无需担心
    PID 被重用。

    当您启动多个后台进程时,PID 确实有可能被其他进程重用。
    但这不是问题,因为除非它是您的子进程,否则您不能对进程进行 wait

    否则,检查您启动的后台作业之一是否通过 wait 以外的任何方式完成总是不可靠的。

    关于linux - Bash:是否有可能阻止 PID 被重用?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40359901/

    10-12 17:12
    查看更多