2016-09-22 6 views
0

私は、単純なbashスクリプトを持ってバックグラウンドでの無限ループの実行のPID(&)bashスクリプトで

#!/bin/bash 

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

は、どのように私は、将来的にプロセスを殺すために、変数にこのループのPIDを割り当てることができますか?私はトラップをしようとするが、ループには自分自身のpidがあるので、例えばSIGTERMの後でバックグラウンドで実行するループのPIDを知っておくべきである。

+0

あなたは 'ps -eaf | grep "bash" 'を実行してプロセスを見つけます。しかしこれは、通常、複数のプロセスのリストを提供します。この場合、推測になります。 @ rednebの答えはよりクーラーです。 – VM17

答えて

3

この$!変数から開始されたバックグラウンドプロセスの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) 
+0

ありがとう!それがまさに私が必要としていたものです。 – Sever

1

ファイルにpidを書き込むことができます。その後、必要なときにそのファイルを読んでください。

kill $(</tmp/myprocess.pid) 

See also:あなたはあなたのような何かを実行しますバックグラウンドプロセスを強制終了したい場合は、

#!/bin/bash 

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

:たとえば次のような何かを行うことができます。

+0

ありがとうございます。素晴らしい解決策。非常に申し訳ありません私は2つの答えを受け入れることができません:) – Sever

関連する問題