System Management
キャンセル
次の結果を表示 
次の代わりに検索 
もしかして: 

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

taka-m
時折のビジター

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

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

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

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

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

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

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

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

よろしくお願いします。

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

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

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

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

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

> ことになっています。

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

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

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