簡體   English   中英

bash腳本中在后台(&)中運行的無限循環PID

[英]PID of infinite loop run in background (&) in bash script

我有簡單的bash腳本

#!/bin/bash

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

我如何將這個循環的pid分配給變量,以在將來終止進程? 我嘗試使用trap,但是循環具有自己的pid,因此我應該知道例如在SIGTERM之后在后台運行的pid可以殺死它。

可以從$!提取啟動的后台進程的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 )

您可以將pid寫入文件。 然后在需要時讀取該文件。 例如,您可以執行以下操作:

#!/bin/bash

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

然后,如果您想終止后台進程,請運行以下命令:

kill $(</tmp/myprocess.pid)

另請參閱

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM