Bashスクリプトで長期実行バックグラウンドプロセスを開始します。プロセスをバックグラウンドで送信した後、PID番号を変数に保存し、必要に応じてそのPID番号を使用してプロセスを終了します。
ただし、スクリプトがバックグラウンドプロセスを終了する前にバックグラウンドプロセスが終了し、システムが新しく作成されたプロセスに同じPID番号を割り当てる場合は、その番号を使用してバックグラウンドプロセスを終了するときに機能します。新しく作成されたプロセスを終了します(権限によって異なります)。 、もちろん)。
使用されたPID番号は短期間に新しく作成されたプロセスに割り当てられていませんが、私のスクリプトは数週間実行されるため可能です。
そのような事故をどのように避けることができますか?
ベストアンサー1
コメントで提案されているように、このpkill
ユーティリティは役に立ちます。
「bashスクリプト」と言ったので、実行する必要がありますpkill bash
。これはすべきではありません。
pkill -f <name>
代わりに、完全なプロセス名を使用してマッチングを使用できます。したがって、タスクがあると仮定すると、bash /home/me/my_script.sh
次のものを使用できます。
pkill -f -e my_script.sh
これは-e
オプションで、何が死んだのかを出力します。
選択する:
次のスクリプトを別の名前で/usr/bin/mykill
(または希望の場所に)保存します。
#!/bin/bash
mypid="$1"
if [[ ! -f /proc/$mypid/cmdline ]]; then
echo "Process ID not found."
exit 1
else
echo "About to kill $(cat /proc/$mypid/cmdline)"
echo "Press enter if you want to kill that process"
read -p "Press CTRL-C if you don't want that"
kill $mypid
fi
次のように実行します。mykill <pid>