system management
1753751 メンバー
5244 オンライン
108799 解決策
新規ポスト

psで出力されるプロセスについて

 
kudou568
時折のアドバイザー

psで出力されるプロセスについて

毎々、お世話になっております。

psにて特定のプロセスでgrepし、PIDを拾ってkillするスクリプトがあります。以下のような感じです。(csh)

set PKANSI = `ps -e | grep defunctkansi | grep -v grep | wc -l`

if ( $PKANSI > 0 ) then

set PKANSI_PID = `ps -e | grep defunctkansi | grep -v grep | awk -F" " '{print $1}'`

kill $PKANSI_PID

endif

スクリプトはこの後もいろいろ処理を行うのですが、極稀に途中で終了してしまっているときがあります。

いろいろ検証した結果、おそらく、"set PKANSI_PID・・・"のところで実際は1個しかないはずのプロセスが

2個表示され(同じ物)、killするときに2個のうち1個はないよって怒られ、そこで終了しているようです。

何故2個表示されるのでしょうか?

どなたかご存知であればご教授お願いいたします。

1件の返信1
hori2002
新しいメンバー

psで出力されるプロセスについて

同様の現象が以前担当のシステムでありました。

その際はクローンプロセスが原因でしたので、

参考までに情報提供します。

クローンプロセスとはUNIXがコマンドを実行する際

に新しくプロセステーブルを確保するために自身と

同じ名前で作成されたプロセスのことを指します。

たとえばAというプロセスが内部で処理を実行する際

(ここではcat)以下の流れでクローンプロセスが作成

されます。

PID PPID プロセス名

2312 1 A



2312 1 A

2313 2312 A ←親のPIDをPPIDに持つプロセスが

        クローンプロセス



2312 1 A

2313 2312 cat

このように一時的に同一名のプロセスが2つ存在する

状況が生まれるので監視対象とした場合、タイミング

によっては複数検知してしまいます。

ただ一瞬ですので極稀に検知していました。

ps -efにて複数検知した際のPID、PPIDを出力して

上記の関係があり、且つ複数存在する状況が一時的

(一瞬)であればクローンプロセスの仕業と思って

間違いないと思います。

宜しくお願いします。