004. プロセスの停止
プロセスを停止する処理を書く時、ps と grep と kill を使いますよね?
例1)悪い例
#!/usr/bin/ksh
PID=$(ps -ef | grep プロセス名 | awk '{ print $1 }')
kill ${PID}
これは何がいけないでしょう?
まず、プロセスが存在しない時、変数 PID が空文字列となってしまい、3行目でエラーになってしまいます。
そこで、エラー処理を追加してみます。
例2)まだ悪い例
#!/usr/bin/ksh
PID=$(ps -ef | grep プロセス名 | awk '{ print $1 }')
if [[ ! "${PID}" = "" ]]
then
kill ${PID}
fi
とりあえず、文法エラーは出なくなりましたが、まだ問題があります。
それは、2行目を実行している時に、grep のプロセスが ps の結果にはいってきてしまうことがあるからです。
すると、grep の結果が正しく終了する前に強制終了されてしまい、PID に正しい結果が入りません。
そこで、
例3)とりあえずの正解?
#!/usr/bin/ksh
PID=$(ps -ef | grep プロセス名 | grep -v grep | awk '{ print $1 }')
if [[ ! "${PID}" = "" ]]
then
kill ${PID}
fi
こうすることで、grep のプロセスが PID に入ってくることを回避できます。
でも、まだまだ問題が隠れています。
例えば、
1. 複数のプロセスに対応していない。
2. kill では正常終了しない。
3. そもそも kill して良いの?
4. その他にもこんなことが...
...この辺は次回。
2005/05/23 ごめんなさい。| awk '{ print $1 }' を書き忘れてました。 m(_ _)m
戻る
Last Updated: 2/9/2006
WebMaster: Satoshi Yamashina chihioizu@gmail.com