pgrepから返されたプロセスIDを直接終了し、ロックファイルを削除してモノサービスRecorderManager.exeプロセスを完全に終了することを目的として、次のクリックUbuntu 16.04 bashスクリプトを作成してテストしました。
#!/bin/bash
PID=$(exec pgrep -lx "Recorder Manage")
echo $PID
NUMBER=$(echo $PID | tr -dc '0-9')
echo $NUMBER
kill -9 $NUMBER
rm /tmp/My_Recorder.exe.lock
多くのテストの後、私はこのbashスクリプトの動作がランダムに交互に現れることを発見しました。時には「Killed!」を出力し、時には「10931 My_Recorder.exe」の後に10931を出力します。
このようなランダムな動作が発生するのはなぜですか、どうすれば解決できますか?
答え1
スクリプト自体の名前は何ですか?パターンと一致しますかRecorder Manage
?そのpgrep
場合は、探しているプロセスに加えてスクリプト自体も見つける必要があります。そうすれば、最初にリストする効果的な問題になります。
kill -9
また、必ず必要な場合以外は使用しないでください。代わりにkill
sendを使用すると、独自のPIDファイルを含む終了したプロセスがそれ自体でクリーンアップされます。SIGTERM
SIGKILL