首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >巴什:有可能阻止PID被重用吗?

巴什:有可能阻止PID被重用吗?
EN

Stack Overflow用户
提问于 2016-11-01 12:16:23
回答 4查看 987关注 0票数 5

是否有可能阻止PID被重用?

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

换句话说,我想做这样的事情:

代码语言:javascript
复制
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
  • 重复

*进一步解释:

  • 假设10个工作岗位已经启动
  • 工作5出口
  • 由另一个用户启动的新进程,例如,他们登录到tty。
  • 新进程具有与作业5相同的PID!
  • 现在,我们的脚本检查作业5的终止,但看到PID在使用tty!
EN

回答 4

Stack Overflow用户

发布于 2016-11-01 12:37:47

您不能“阻止”PID被内核重用。然而,我倾向于认为这并不是一个真正的问题,你。

但是,可以考虑串联地启动多个后台作业,然后等待它们全部完成。

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

当您启动几个后台进程时,其他进程确实有可能重用PID。但这并不是一个问题,因为除非是您的子进程,否则不能在进程上使用wait

否则,检查启动的后台作业中是否有一个是以wait以外的任何方式完成的,这总是不可靠的。

票数 6
EN

Stack Overflow用户

发布于 2016-11-01 12:28:05

除非您已经检索到子进程的返回值,否则它将存在于内核中。这也意味着它的pid是绑定到它的,不能在这段时间内被重用。

票数 2
EN

Stack Overflow用户

发布于 2016-11-01 14:44:37

进一步解决这个问题的建议--如果您怀疑分配给您的后台作业的PID是重新分配的,请在ps中检查它,看看它是否仍然是您的进程和您的可执行文件,并且具有PPID (父PID) 1。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40359901

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档