[Armadillo:05769] Re: Armadillo-300 Pthread について

K++ email@hidden
2010年 9月 3日 (金) 18:23:22 JST


Yasushi SHOJI様

ご指導ありがとうございます.
お忙しい中いろいろ質問して大変申し訳ありません.

作成したプログラムを修正したところ正しく終了でき,問題解
決いたしました.

> blocking i/o の中に、以下の2種類があります。
>  - interruptible sleep (S)
>  - uninterruptible sleep (D)

> これはlinuxthreadsの仕様なら,このままlinuxthreadsを使
う
> > 場合はnon-blockingタイプに修正するしかない?また
> blockingと uninterruptible
> は異なるので、大丈夫なはずです。

なるほど,system callでblocking io=uninterruptible sleep
と勘違いしてしまいました.

> で、今回 read/recv でひっかかっていたなら SIGTERM
> が処理されていたって
> ことでしょうかね? SIGKILL だと変る?
はい,そのようです.
確かにSIGKILLだと全部のスレッドが終了しました.

前々回のメール内のプログラムで,mainからsignal処理専用のthread
を作り,そこでsigwaitで各種のシグナルを処理していました
.NPTLではsignalがちゃんとsignal処理用のスレッドに届くがlinuxthreads
の場合main thread(linuxthreadsの場合は特別な存在?)に
しか届かないようなので,

[参考]
http://d.hatena.ne.jp/kori_hatonosuke/searchdiary?of=10&word=%2A%5B%A5%D7%A5%ED%A5%B0%A5%E9%A5%DF%A5%F3%A5%B0%5D

プログラムを
+ 専用のsignal処理threadを削除し
+ main threadでシグナルをして,後処理を行い, exit()する
のように修正しました.
# kill -SIGINT 最初のthread id
で全部のthreadを終了させることができました.

加えて,signal専用のthreadを使用するとき,定期的にSIGALARM
を発生させ,ある処理を行っていたが,armadillo上で実行し
たところ全くSIGALARMを受信できませんでした.main thread
でsignal処理するように修正した後,正しくSIGALARMを受信で
きるようになりました.

とりあえず,これで全部の問題を解決できました.
非常に適切なアドバイス本当にありがとうございました.

K++



--------------------------------------
GyaO! - Anime, Dramas, Movies, and Music videos [FREE]
http://pr.mail.yahoo.co.jp/gyao/



armadillo メーリングリストの案内