是否有可能阻止PID被重用?
例如,如果我在后台使用myjob运行作业myjob &,并使用PID=$!获取PID,那么在我检查PID不再存在之前,是否有可能阻止linux系统重用该PID (进程已经完成)?
换句话说,我想做这样的事情:
myjob &
PID=$!
do_not_use_this_pid $PID
wait $PID
allow_use_of_this_pid $PID在上面给出的例子中,想要这样做的理由没有多大意义,但是请考虑串联地启动多个后台作业,然后等待它们全部完成。
一些程序员花花公子正确地指出,没有2个进程可以共享相同的PID。这是正确的,但不是我在这里要求的。我要求一种方法,以防止PID被重复使用后,进程已经启动了一个特定的PID。然后,在我使用完它之后重新启用它的方法,以检查我的原始过程是否完成。
由于它已经被要求,这里有一个用例:
*进一步解释:
发布于 2016-11-01 12:37:47
您不能“阻止”PID被内核重用。然而,我倾向于认为这并不是一个真正的问题,你。
但是,可以考虑串联地启动多个后台作业,然后等待它们全部完成。
一个简单的wait (没有参数)将等待所有子进程完成。因此,您不需要担心PID被重用。
当您启动几个后台进程时,其他进程确实有可能重用PID。但这并不是一个问题,因为除非是您的子进程,否则不能在进程上使用wait。
否则,检查启动的后台作业中是否有一个是以wait以外的任何方式完成的,这总是不可靠的。
发布于 2016-11-01 12:28:05
除非您已经检索到子进程的返回值,否则它将存在于内核中。这也意味着它的pid是绑定到它的,不能在这段时间内被重用。
发布于 2016-11-01 14:44:37
进一步解决这个问题的建议--如果您怀疑分配给您的后台作业的PID是重新分配的,请在ps中检查它,看看它是否仍然是您的进程和您的可执行文件,并且具有PPID (父PID) 1。
https://stackoverflow.com/questions/40359901
复制相似问题