2016-09-22 38 views
3

私は開始したいプログラムがあります。Bash:子プロセスの開始と終了

  1. プログラム(./endlessloop &
  2. ウェイツ1秒(sleep 1を開始します:私はbashスクリプトを書きたいと言うこのプログラムは、しばらく(真)-loopを実行します(それが終了しない」してみましょう)
  3. 撃破プログラム - ?!。>どのよう

私は、サーバーが同時にインスタンスの多くを実行しているので、子供からPIDを取得するために$を使用することはできません

+1

どのコードを試しましたか、どのように失敗しましたか? – CAB

+1

私は上記の括弧内の2つを試しました。問題はエンドレスループを殺す方法ですか? –

答えて

0

あなたはPを使用することができます同じのためのgrepコマンド:

kill $(pgrep endlessloop) 
+0

'pkill'を使って、それを1日と呼びましょう!! – heemayl

+2

あなたが始めたものだけでなく、すべてのエンドレスループを殺すでしょう。 'endlessloopctl'や' read-endlessloop-logs'も殺します。 –

+0

私はここで一秒待つことができないのですか? –

2

ストアPID:

if kill -0 "$endlessloop_pid"; then 
    echo "Endlessloop is still running" 
fi 

...と保存:

./endlessloop & endlessloop_pid=$! 
sleep 1 
kill "$endlessloop_pid" 

また、プロセスがまだkill -0で実行されているかどうかを確認することができます変数内のコンテンツは、複数のプロセスに対応することを意味します。

endlessloop_pids=()      # initialize an empty array to store PIDs 
./endlessloop & endlessloop_pids+=("$!") # start one in background and store its PID 
./endlessloop & endlessloop_pids+=("$!") # start another and store its PID also 
kill "${endlessloop_pids[@]}"    # kill both endlessloop instances started above 

も参照してくださいBashFAQ #68、「どのようにコマンドを実行し、それがN秒後(タイムアウト)を中止していますか?」

Wooledgeのwiki上のProcessManagementページには、関連するベストプラクティスについて説明します。

+0

しかし、私はすべての無限ループプロセスを殺したくない、ちょうど始めたもの... –

+0

@今天春天、この答えはそれを行います。 '$ endlessloop_pid'は、起動されたPIDだけを格納します。あるいは、' endlessloop_pids'配列の場合、開始されたPIDのPIDを格納します。 –

+0

ポイントは、どちらが正しいものかを区別することができないということです。 –

関連する問題