system management
1752745 メンバー
4756 オンライン
108789 解決策
新規ポスト

マルチスレッドでのsystemの使用について

 
taka-m
新しいメンバー

マルチスレッドでのsystemの使用について

HP-UX11i にてマルチスレッドのデーモンプログラムを作成、運用していております。

ある日を境に急にデーモンプログラムが途中から2つに増えて動かなくなってしまうようになりました。

psを使って状況を確認すると最初に起動したデーモンが親になって、もう1つデーモンが起動したことになっています。

デーモン内では、メインスレッドから別れたサブスレッドの中でsystem()を呼び出しています。

引数の文字列がデーモンを指しているということはありませんでした。

通常の使用でsystem()がおかしいとは考えられないですし、スレッド対応とマニュアルでも書いてあるのでまさかと思うのですが、プロセスを生成する疑いのあるコードがここしかないので疑わざるを得ない状況です。

だれかこのようなことが起こり得る、あるいは似たようなことを経験したという方がいらしたら情報をお願いします。

よろしくお願いします。

1件の返信1
nt
貴重なコントリビューター

マルチスレッドでのsystemの使用について

Unix での process の起動は fork() + exec() です。

system() も内部で fork() と exec() を行っています。

> 最初に起動したデーモンが親になって、もう1つデーモンが起動した

> ことになっています。

これは fork() した状態ではないでしょうか?

system() 内部で fork() したあと exec() する前に何らかの resource の

競合で dead lock が発生しているのではないでしょうか?