ksh スクリプトの小技集


005. 複数プロセスの停止

    前回の問題点の1つは、複数のプロセスがある場合などに対応していないということでした。

    そこで、さっさと対応させてしまいましょう。   (^^)/

    例4)複数対応

       #!/usr/bin/ksh
       ps -ef | grep プロセス名 | grep -v grep | while read PID dummy
       do
         kill ${PID}
       done

       ps の結果を while read で1行ずつ取ってきて PID の変数に プロセスIDが、
       dummy に第2引数以下が順次代入されていきます。
       PID には条件にあったものだけが代入されるため、前回のような if 文や
       awk による第1引数のみとってくる必要はありません。
       結構すっきりしてるでしょ?

    プログラムの動作を試したい人は、ksh の後に -x をつけて、
    kill の前に echo をつけると確認ができます。

       #!/usr/bin/ksh -x
       ps -ef | grep プロセス名 | grep -v grep | while read PID dummy
       do
         echo kill ${PID}
       done

     プログラムの動作を確認する時、あぶないコマンド(kill とか rm とか)の前に
     echo をつけてから動作を確認すると安全です。
     ただし、取り忘れないことが肝要です。

       #!/usr/bin/ksh -x
       DEBUG=echo
       ps -ef | grep プロセス名 | grep -v grep | while read PID dummy
       do
         ${DEBUG} kill ${PID}
       done

       としておいて、本番では DEBUG="" とするのも良いかもしれませんね。


    ...ではまた次回。
  

戻る
ちほ Last Updated: 2/9/2006
WebMaster: Satoshi Yamashina chihioizu@gmail.com