我有简单的bash脚本
#!/bin/bash
(while true; do
true;
sleep 3
done) &
如何将此循环的pid分配给变量,以便将来杀死进程?我尝试陷阱,但循环有自己的pid,所以我应该知道在后台运行循环的pid以杀死它,例如在SIGTERM之后。
答案 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)