私は開始したいプログラムがあります。Bash:子プロセスの開始と終了
- プログラム(
./endlessloop &
) - ウェイツ1秒(
sleep 1
を開始します:私はbashスクリプトを書きたいと言うこのプログラムは、しばらく(真)-loopを実行します(それが終了しない」してみましょう) - 撃破プログラム - ?!。>どのよう
私は、サーバーが同時にインスタンスの多くを実行しているので、子供からPIDを取得するために$を使用することはできません
私は開始したいプログラムがあります。Bash:子プロセスの開始と終了
./endlessloop &
)sleep 1
を開始します:私はbashスクリプトを書きたいと言うこのプログラムは、しばらく(真)-loopを実行します(それが終了しない」してみましょう)私は、サーバーが同時にインスタンスの多くを実行しているので、子供からPIDを取得するために$を使用することはできません
あなたはPを使用することができます同じのためのgrepコマンド:
kill $(pgrep endlessloop)
'pkill'を使って、それを1日と呼びましょう!! – heemayl
あなたが始めたものだけでなく、すべてのエンドレスループを殺すでしょう。 'endlessloopctl'や' read-endlessloop-logs'も殺します。 –
私はここで一秒待つことができないのですか? –
ストア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ページには、関連するベストプラクティスについて説明します。
しかし、私はすべての無限ループプロセスを殺したくない、ちょうど始めたもの... –
@今天春天、この答えはそれを行います。 '$ endlessloop_pid'は、起動されたPIDだけを格納します。あるいは、' endlessloop_pids'配列の場合、開始されたPIDのPIDを格納します。 –
ポイントは、どちらが正しいものかを区別することができないということです。 –
どのコードを試しましたか、どのように失敗しましたか? – CAB
私は上記の括弧内の2つを試しました。問題はエンドレスループを殺す方法ですか? –