- PR -

nouhup実行しているプロセスが2つ検知されてしまう

1
投稿者投稿内容
pirorino
会議室デビュー日: 2008/05/14
投稿数: 4
投稿日時: 2008-05-14 13:18
WEBサーバから、別サーバ上に存在する帳票処理機能(SVFサーバ)を呼び出している環境上の話です。

SVFサーバは正副2台構成となっており、通常時は正サーバを参照していますが、
WEBサーバ上で常駐している(nohup実行)プロセスから常時SVF正サーバをping監視、応答が
タイムアウトになった場合はWEBサーバのhostsを自動で書き換え、SVF副サーバを利用するようにして
手動でHA構成を作っています。

この構成自体には問題ないのですが、このnohup実行しているプロセスが、監視機能JP1によって
まれにプロセスが2つ検知されることがあるようです。

プロセスは2008年3月に一度nohup実行したきりで、だれも操作した形跡はありません。実行すると
実行ログが出るので証拠が残ります。
また、プロセス2つを検知した後すぐサーバを確認しても、プロセスはやはり1つしか残っていません。

------------------------------------------------nohup実行しているプロセス
・kshで記載
・printout関数は別途loggerに引き渡す様定義
・192.168.1.2はSVF副サーバのアドレスです。

MON_STATUS="NORMAL"

while true
do
if [ ${MON_STATUS} = "NORMAL" ]
then
ping -q -c4 192.168.1.10
RC=$?
if [ $RC != 0 ]
then
MON_STATUS="DOWN"
printout "[ERROR] T0000F2 change IP adress to SVF#2 because of SVF#1 halt"
awk '$2=="SVFsv01"{printf "192.168.1.2 SVFsv01\n"}$2!="SVFsv01"{print $0}' < /etc/hosts > /etc/hosts.mon_svf
cp -p /etc/hosts.mon_svf /etc/hosts
exit 1
fi
fi
sleep 50
done
------------------------------------------------

プロセス数検知では、
[root@WEBsv01 log]# ps -ef |grep svf
root 884 1 0 Mar08 ? 00:00:02 /bin/ksh -x /home/tech/sh/mon_svf.sh
上記の/home/tech/sh/mon_svf.shを1プロセスとして検知しています。

だれかが操作しているということは非常に考えづらいので、linuxのシステムの方で
自動でプロセス生成をしているという可能性が高いように思うのですが、
確認の方法がなく困っています。

どなたか、お分かりのことがありましたら教えてください。

よろしくお願い致します。
angel
ぬし
会議室デビュー日: 2005/03/17
投稿数: 711
投稿日時: 2008-05-14 13:52
こんにちは。

発生する頻度はかなり低いでしょうが、十分起こりうる事象です。
特に不思議なことではありません。

件のプロセスがシェルスクリプト(を実行しているシェルプロセス)である以上、さまざまな子プロセスを生成することになります。( awk とか cp とか sleep とか… )

Linux(UNIX系OS)の仕組み上、

 1. シェルプロセスが forkシステムコールを発行
   → 元のプロセスのコピーが子プロセスとして生成される
 2. 子プロセスが execveシステムコールを発行
   → 子プロセスが別のプログラムとして実行開始( awk とか cp とか sleep とか… )
 …

とようなことが行われます。
※元のシェルプロセスは、子プロセスの終了を wait しておき、子プロセスが動作終了時に発行する exit ( により生成される CHLDシグナル ) を受け、終了を判断する。

そうすると、1 と 2 の間 ( fork してから、子プロセスが execve するまでの間 ) は、子プロセスは元のプロセスのコピーですから、同一のプロセスが2つあるように見えることになります。…非常に短い期間ですので、そうしょっちゅう観測できるわけではありませんが。
pirorino
会議室デビュー日: 2008/05/14
投稿数: 4
投稿日時: 2008-05-14 17:00
angel様:

書き込みありがとうございます。

プロセス生成上、元プロセスのコピーが一瞬でも発生するということですね。

このシステムでは、3月末に本番稼動を始めて以後、現在までに同事象が2回発生しています。
ジョブ中のsleepのタイミングと、プロセス検知の時間間隔からすると
非常に低い可能性で現在まで2回発生しているというのは納得が行きました。

どうもありがとうございました。
tm
会議室デビュー日: 2003/09/01
投稿数: 2
投稿日時: 2008-05-15 07:05
>プロセス数検知では、
>[root@WEBsv01 log]# ps -ef |grep svf
>上記の/home/tech/sh/mon_svf.shを1プロセスとして検知しています。

こちらですが、grep自体のプロセスがgrepでマッチしてませんか?
(grepが起動するタイミングで、psでgrep自体のプロセスが出力される
場合とされない場合があります)
/home/tech/sh/mon_svf.shのみをプロセス数としてカウントしているの
であれば問題ないと思いますが、
そうでなければ、
# ps -ef | grep svf | grep -v grep
などが必要では?
1

スキルアップ/キャリアアップ(JOB@IT)