BASH - 检查PID是否存在

Joh*_*hnP 21 bash shell pid

我想停止执行BASH脚本,直到进程关闭(我将PID存储在变量中).我在想 __CODE__

我见过的大多数例子都使用/ dev/null,它似乎需要root.有没有办法在不需要root的情况下执行此操作?

非常感谢你提前!

moo*_*dow 32

kill -s 0 $pid如果$pid正在运行则返回成功,否则失败,而不实际向进程发送信号,因此您可以if直接在语句中使用它.

wait $pid 将等待该过程,替换整个循环.

  • 注意:`kill -0 $ pid`仅适用于您拥有的进程.`ps -p $ pid`适用于任何进程. (9认同)
  • 注意:`wait $ pid`仅在您是`$ pid`的父项时才有效. (2认同)

sli*_*cki 20

好像你想要的

wait $pid
Run Code Online (Sandbox Code Playgroud)

$pid完成后将返回.

否则你可以使用

ps -p $pid
Run Code Online (Sandbox Code Playgroud)

检查进程是否仍然存在(这比kill -0 $pid因为即使你不拥有pid也会有效).

  • 注意:只有当“$pid”是 shell 的子进程时,“wait”才有效。在这些场景中,情况可能很常见,但并非总是如此。 (2认同)

Mat*_*ser 8

ps --pid $pid &>/dev/null

如果存在则返回0,否则返回1


Tom*_*icz 7

您可能会查找/proc/YOUR_PID目录的存在.

  • 如果您只在Linux中运行脚本,那没关系.为了确保兼容性,最好使用上面给出的`kill -s`技巧. (2认同)