• ベストアンサー

スレッドでのシグナルの使用について

linux初心者なので、困っています。助けてください。 スレッドが複数登録してある状態で、特定のスレッドのみでシグナルを受信したいのですが、可能でしょうか? また、使用する際の注意点なども教えて頂けたらお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • chirubou
  • ベストアンサー率37% (189/502)
回答No.1

pthread でしょうか?以下 pthread を仮定して。 可能です。 一般にあるプロセスにシグナルが配送されると、どのスレッドでそのシグナルのハンドラが実行されるかは、明示的に指定しない限り、分かりません。つまり OS の都合で決められた適当なスレッドでハンドラが実行されます。 これを避けるには、pthread_sigmask() で全てのスレッドのシグナルマスクを適切に設定する必要があります。具体的には、シグナルを受けたくないスレッドではそのシグナルを無視するようにし、そうでないスレッドではそのシグナルを無視しないようにします。 特に注意点はないと思いますが、一点だけ、sigprocmask() でプロセス全体のシグナルマスクが設定できますので、もしこれを使っているようでしたら、矛盾のないようにしないといけませんね。 私も最初、この仕様を知った時には「面倒でセンス悪」と思ったのですが、よく考えるとこういう仕様にしかなり得ないので、仕方がないようです。

LEDdaisuki
質問者

お礼

早速のお返事ありがとうございます。 教えていただいた方法で試してみようと思います。 また、何かありましたらよろしくお願い致します。

関連するQ&A

  • クラスでスレッド作成

    VC++2008Express WIN32APIでRS232Cの通信用クラスを作成しています。 RS232Cの受信用スレッドを作成して 1ポートの受信処理をするようにはできます。 ですが ポート追加するたびにクラスをインスタンス化して受信用スレッドを 作成したいのですが、スレッド作成するには使用する変数などを staticにしないといけないため、クラスを複数インスタンス化できません。 どのような手法でクラスから複数スレッドを作成することができるのでしょうか? 分かりにくい説明ですが、参考になるものなどありましたら、 よろしくお願いします。

  • gprofとスレッドについて

    こんにちは。 gprofの使用方法について伺いたいことがあります のでよろしくお願いします。 $gcc -pg -pthread ファイル名 $./a.out $gprof a.out gmon.out | less 上記のように実施したところ、 スレッドから呼び出される関数の時間が0.00秒となっており、測定されていないようです。 (関数内に遅延処理をいれても変わらずです) スレッドを使用するプログラムをgprofにかける際に、 注意すべき点などを教えていただけないでしょうか。

  • Gmailのスレッドとフィルタについて

    長文失礼いたします。 自分でもいろいろと調べたつもりなのですが、 答えが見当たらなかったのでご教示頂ければ幸いです。 職場でのメールソフトを、最近OEからGmailに変えました。 自分なりに調べてある程度の使い方は理解したつもりです。 やりたいこと・わからないことは2点です。 (1)BCCで送ったメールへの返信を、相手ごとにスレッドを分離したい  お知らせのメール等をBCCで送ることが多いのですが、  その際、送ったメールへ返信があると、同じスレッド内に複数人のメールが表示されますよね?  それを個々の内容によって、それぞれラベルを分けられると便利なのですが、  スレッド機能は残したまま、一人ひとりのスレッドに分けることはできないのでしょうか?  例: スレッド内…送信:自分>返信:Aさん・Bさん・Cさん       ↓これを     スレッド内…送信:自分>返信:Aさん                    >返信:Bさん                    >返信:Cさん (2)スレッド機能を無効にした状態で、受信メールに自動で返信済みラベルをつけたい  (1)の質問が解決するのが一番いいのですが、調べてもわからず、  「内容ごとにラベルをつけたければスレッドを無効に」といった質問・回答等を多く見たので、  今はとりあえずスレッドを無効にしています。  ですが、そうすると「返信済み」ラベルが受信メールでつかなくなってしまいました。  もちろんそれは件名に「Re:」等が入っていないからというのはわかりますし、  送信済みを見れば今まで通りのラベルがフィルタ機能によって自動で貼られます。    ただ、同じGmailのメールソフトを複数人で管理しているため、  返信済みかどうなのか受信トレイで一目でわかるようにしたいのです。  かつ、手動でラベルを貼るというのはできるだけ避けたいです。  (パソコンが苦手な人が大多数なので…)  ちなみに、スターは未処理のメールにつけるようにしてあるので、使えません。  どうにかラベルで対応したいです。 語彙力がなく説明が上手にできず申し訳ないのですが、 なんとか汲み取って頂けるとありがたいです。 OSはwin7を、GmailはChromeから利用しています。 何卒お知恵をお貸しください。 よろしくお願いいたします。

  • スレッドセーフ

    VS.netを使用している開発初心者です。 スレッドセーフな実装をする・・と言っても、具体的にどんなことをすればいいのかわかりません。みなさんが気をつけている点やテクニックなど何でもいいので教えてください。 よろしくお願い致します。

  • 2ちゃんねるで新たにスレッドを立てる方法

     2ちゃんねる初心者です。議題があって、新たにスレッドを立てたいのですが、どうすればいいのでしょうか。いろいろ探してみましたが、分かりませんでした。どこかに、「2ちゃんねるでスレッドを立てる手順」が書かれたサイトなどはないでしょうか。  また、自分だと特定される情報は、掲示板上に残るのでしょうか。 (完全に特定されなくても、どのプロバイダーからアクセスしたユーザーだとか、どこそこに書き込んだのと同じ人が新たにスレッドを立てようとしている、というのが分かる、とか。IPアドレスも特定されるのでしょうか) できるだけ、IPアドレス程度の情報でも、残したくないと考えています。不可能ならば、それでも結構ですが、方法があれば、知りたいです。よろしくお願いします。

  • スレッドの扱い方

    javaの初心者です。 質問ですが、 スレッドを使って再生ボタンを押すと画像が動き出すプログラムを作成しています。再生ボタンを押すとスレッドを立ち上げるようにしているのですが、再生ボタンを2回以上押すとどんどん画像の動くスピードが速くなってしまい困ってます。 ボタンが押されるたびにスレッドが立ち上げられているからだと思うのですが、どうしたら初期の状態に戻すことができるか教えていただけないでしょうか?

  • Linuxでのスレッド間メッセージについて

    Linuxでスレッドを複数生成し、スレッド間でメッセージのやり取りをしたいと思っています。 ネットで色々検索したのですが、欲しい情報にめぐり合えていません。 # WindowsのPostThreadMessage()みたいなものを探しています。 #「プロセス間通信」というものは発見しましたが・・・ 何か方法はありますでしょうか? スレッド間のメッセージのやり取りの方法がない場合は代替案も教えて頂きたいです。 # セマフォを用いて共有メモリアクセスかな?と思っています。

  • Javaスレッドの割り込みについて

    Javaのスレッド割り込み制御についてご質問です。 スレッドの割り込みの際に用いるメソッドinterrupt()は、 通常、対象のスレッドがsleep()やwait()状態の最中でアクセス不能な場合に使用しますが、 対象のスレッドが、sleep()やwait()以外の状態で、正常に動作している場合に interrupt()を実行した場合、どのような動きをするのでしょうか? 特に問題などありますでしょうか? お手数ですが、どなたかご教授願います。

  • シグナルが弱い

    普通の木造住宅で無線LANを使用しています。 一階にNEC製WARPSTARを設置。 二階でPCを使用していますが30分程度使用してると接続が切れてしまいます。酷い時には繋がりません。 接続前のシグナルの強さは満タンなのに繋いだ状態だと弱いになってしまっています。 ちなみにPCは買い換えたばかりで買い替え前のPCも同じ状態でした。 解決策ありましたらご指導下さい。

  • ネットでのスレッドの立て方

    2チャンネル(?)の「隣人注意報」にスレッドを建てたいと思います。 色々な 「まとめ」とかは、たまに見るのですが・・・ 新規で立てには、どうすれば良いか良くわかりません。 出来たら、立てたスレを見ている人の質問に答えたいのですが・・・ 初心者にも良く分かるようにご指導頂けませんでしょうか? 宜しくお願いします。