- Community Home
- >
- HPE Community, Japan
- >
- HP-UX
- >
- Network
- >
- プロセス停止
カテゴリ
Company
Local Language
フォーラム
ディスカッションボード
フォーラム
- Data Protection and Retention
- Entry Storage Systems
- Legacy
- Midrange and Enterprise Storage
- Storage Networking
- HPE Nimble Storage
ディスカッションボード
ディスカッションボード
ディスカッションボード
フォーラム
ディスカッションボード
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
- BladeSystem Infrastructure and Application Solutions
- Appliance Servers
- Alpha Servers
- BackOffice Products
- Internet Products
- HPE 9000 and HPE e3000 Servers
- Networking
- Netservers
- Secure OS Software for Linux
- Server Management (Insight Manager 7)
- Windows Server 2003
- Operating System - Tru64 Unix
- ProLiant Deployment and Provisioning
- Linux-Based Community / Regional
- Microsoft System Center Integration
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
フォーラム
ブログ
- RSS フィードを購読する
- トピックを新着としてマーク
- トピックを既読としてマーク
- このトピックを現在のユーザーにフロートします
- ブックマーク
- 購読
- 印刷用ページ
- 新着としてマーク
- ブックマーク
- 購読
- ミュート
- RSS フィードを購読する
- ハイライト
- 印刷
- 不適切なコンテンツを報告
03-19-2005 05:31 PM
03-19-2005 05:31 PM
プロセス停止
アプリケーションがやや複雑なので原因を特定できていないのですが...。
TCP ストリームに対してデータを send しているときに、LAN ケーブルを切断するなどして、更にデータを送り続けると SNDBUF が満杯になりブロッキングモードで捕まります。
この状態で、他のスレッドから該当するソケットを close すると、このタイミングでどうやらプロセスが停止してしまうように見えます。
このような現象になられた方はいらっしゃいますか?
具体的な回避策を検討したいのですが。
- 新着としてマーク
- ブックマーク
- 購読
- ミュート
- RSS フィードを購読する
- ハイライト
- 印刷
- 不適切なコンテンツを報告
03-19-2005 05:40 PM
03-19-2005 05:40 PM
プロセス停止
ハングでないとすると、検討違いの意見になってしまう可能性が高いのですが、そもそもソケットのcloseは何の関数を使ってらっしゃいますか?
もちろんそれはスレッドセーフな関数ですよね。
以前、スレッド間でファイルポインタの操作をして
誤ってミューテックスロック状態になったというのを
聞いたことがあったもので。
- 新着としてマーク
- ブックマーク
- 購読
- ミュート
- RSS フィードを購読する
- ハイライト
- 印刷
- 不適切なコンテンツを報告
03-19-2005 05:48 PM
03-19-2005 05:48 PM
プロセス停止
親プロセスで wait していないのでゾンビになっています。
close は close(2) を使用しています。
send も同様に send(2) です。
よろしくお願い致します。
- 新着としてマーク
- ブックマーク
- 購読
- ミュート
- RSS フィードを購読する
- ハイライト
- 印刷
- 不適切なコンテンツを報告
03-25-2005 06:56 PM
03-25-2005 06:56 PM
プロセス停止
アプリを改変できるなら、該当スレッドが所属するプロセス内で、sigwait() 等によりシグナルを待っている専用スレッドを用意することはできませんか?
そこでとりあえず全部のシグナルを受信して、ログにシグナル番号と時間とかを書き出すといいと思うのですが。
- 新着としてマーク
- ブックマーク
- 購読
- ミュート
- RSS フィードを購読する
- ハイライト
- 印刷
- 不適切なコンテンツを報告
03-25-2005 10:38 PM
03-25-2005 10:38 PM
プロセス停止
もう少し厳密に書くと、socket()で作成したディスクリプタdに対してconnect()した後、データを送信するスレッドT1がsend()を行います。
同時にセッション状態の監視のため、ディスクリプタdに対して別のスレッドT2がselect()をかけます。
この状態でTPケーブルを抜いて送信を継続するとSNDBUFが満杯になり、ブロッキングモードのsend()がリターンしなくなります。
やがてkeepaliveのタイムアウトになり、select()にイベントが上がります。(keepaliveオプションを指定しています)
切断を検知したという意味で、スレッドT2はディスクリプタdに対してclose()を行います。
このときスレッドT1のsend()は捕まったままだと思われます。
この後、このプロセスがpsで表示されなくなりゾンビになります。
- 新着としてマーク
- ブックマーク
- 購読
- ミュート
- RSS フィードを購読する
- ハイライト
- 印刷
- 不適切なコンテンツを報告
03-26-2005 08:47 AM
03-26-2005 08:47 AM
プロセス停止
死んでいるのではないですか?
T1 が send() で block
T2 が select() から抜けて socket を close
T1 が send() から error return
T1 が error check をせずに再び send() (??)
send() が EPIPE を返すとともに SIGPIPE を送る
SIGPIPE は core を作りません。
- 新着としてマーク
- ブックマーク
- 購読
- ミュート
- RSS フィードを購読する
- ハイライト
- 印刷
- 不適切なコンテンツを報告
03-26-2005 12:09 PM
03-26-2005 12:09 PM
プロセス停止
ありがとうございました。