是否可以停止重复使用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。然后还有一种方法,在我完成使用它来检查我的原始过程是否完成之后再重新启用它。
由于有人要求,这是一个用例:
*进一步说明:
答案 0 :(得分:7)
您不能“阻止”PID被内核重用。但是,我倾向于认为这不是一个真正的问题。
但请考虑连续启动多个后台作业,然后等待它们全部完成。
简单的wait
(不带参数)会等待所有子进程完成。所以,你不需要担心
PID被重用。
当您启动多个后台进程时,其他进程可能会重用PID。
但这不是问题,因为除非是您的子进程,否则您不能wait
进程。
否则,检查您启动的其中一个后台作业是否以wait
以外的任何方式完成,总是不可靠。
答案 1 :(得分:1)
除非您检索到子进程的返回值,否则它将存在于内核中。这也意味着它的pid与它绑定,并且在此期间无法重复使用。
答案 2 :(得分:0)
进一步建议解决此问题 - 如果您怀疑分配给某个后台作业的PID已重新分配,请在ps
中进行检查,看看它是否仍然是您的进程您的可执行文件并具有PPID(父PID)1。
答案 3 :(得分:0)
如果您害怕重复使用PID,如果您wait
其他答案解释不会发生,您可以使用
echo 4194303 > /proc/sys/kernel/pid_max
减少你的恐惧; - )