无限循环的PID在bash脚本的后台运行(&)

时间:2016-09-22 08:38:40

标签: linux bash operating-system

我有简单的bash脚本

#!/bin/bash

(while true; do
        true;
        sleep 3
done) &

如何将此循环的pid分配给变量,以便将来杀死进程?我尝试陷阱,但循环有自己的pid,所以我应该知道在后台运行循环的pid以杀死它,例如在SIGTERM之后。

2 个答案:

答案 0 :(得分:4)

可以从此$!变量中提取启动的后台进程的PID。

$ (while true; do
>         true;
>         sleep 3
> done) &
[1] 26159

$ bgPID=$!; echo "$bgPID"         # <---- To store it in a bash variable.
26159

$ kill "$bgPID"
[1]+  Terminated              ( while true; do
    true; sleep 3;
done )

答案 1 :(得分:2)

您可以将pid写入文件。然后在需要时读取该文件。例如,您可以执行以下操作:

#!/bin/bash

(bash -c 'echo $PPID' > /tmp/myprocess.pid
 while true; do
        true;
        sleep 3
done) &

然后,如果你想杀死后台进程,你会运行类似的东西:

kill $(</tmp/myprocess.pid)

See also