問題タブ [sigaction]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
multithreading - スレッドが終了していることを確認する必要がありますか?
Linux で単一のプロセスとして実行される組み込みアプリケーションがあります。
sigaction()
セグメンテーション違反などの問題をキャッチするために使用します。
プロセスにはいくつかのスレッドがあり、アプリと同様に、そのすべてが永久に実行される必要があります。
私の質問は、スレッドの 1 つが死んでいるかどうかを検出する必要があるかどうか (およびその方法) です。
スレッドのセグ フォールトは、アプリケーションのsigaction()
ハンドラーによって捕捉されますか?
を使おうと思っていたのですpthread_cleanup_push/pop
が、このページに「プロセス内のいずれかのスレッドがexit、_Exit、または_exitを呼び出すと、プロセス全体が終了する」と書かれているので、死んだスレッドはプロセスレベルでキャッチされるのだろうか…</p >
c - Posix タイマーにシグナル ハンドラーを使用する必要がありますか?
タイマーを開始し、有効期限が切れたときに呼び出される関数が必要です。
グーグルは、マニュアルの例を含む多くの例を見つけ、そのすべてがsigaction()
シグナルハンドラの設定に使用されます。
ただし、@Patryk は、この質問で次のように述べています 。
これは、より短く、よりシンプルで、よりクリーンで、より保守しやすいものです...
何を与える?これは正しいです?それは単なるラッパーsigaction()
ですか?例で明示的にシグナル ハンドラーを設定するのはなぜですか?
また、このメソッドまたはシグナル ハンドラーのいずれかによってタイマーを開始した場合、タイマーtimer_settime
をキャンセルすると、システムがそのタイマーとコールバックの間の関連付けを削除することになりますか、それとも明示的に行う必要がありますか?
[更新]シグナルまたは以下の回答に示す方法のいずれかを選択できます(またはその両方ですが、ばかげているようです)。それは好みの問題です。Singals は、複雑さを犠牲にして、もう少し機能性を提供するかもしれません。
あなたがやりたいことがタイマーを開始し、それが期限切れになったときに通知を受けることだけなら、私の答えの方法は最も簡単です.
c - sigaction: メンバー名が正しくありません
プログラムのシグナル処理を signal() から sigaction() に移行中です。
UNIX 仕様によると、astruct sigaction
には少なくとも 4 つのメンバーが必要です。sa_handler
、sa_mask
、sa_flags
およびsa_sigaction
。
次のように構造を定義すると、すべてが正常に見えます。
しかし、値を に割り当てようとするsa_handler
と、メンバーが存在しません。代わりに、次のように表示されます。
私は自分のsignal.h
andを調べましたbits/sigaction.h
(ご参考までに、どちらにも 1092 行ありません)。何も問題はないようです。
私もこのメンバー名をそのまま使ってみましたが、コンパイラは
タイプ 'void (*)(int)' からタイプ 'union' に代入するときの比較できないタイプ
これにより、コンパイラ/IDE が構造の定義を処理する方法に何か問題があると思われますが、診断方法については私の頭の上にあります。
ヘルプや提案をいただければ幸いです。
システム情報:
- デビアン 8
- Linux 3.16.0-4-amd64
- gcc 4.9.2 (デビアン 4.9.2-10)
- 日食 CDT 3.8.1
更新 - 2016 年 8 月 3 日
これらの 2 つのスレッドhereとhereが見つかりました。これは、プリプロセッサ シンボル_POSIX_C_SOURCE
と_XOPEN_SOURCE
それぞれを定義することを提案しています。それぞれ (一度に 1 つずつ) を定義し、両方とも互換性のない型の問題を「修正」しました (値を sa.__sigaction_handler に正常に割り当てました)。しかし、それらは両方とも、タイプ intptr_t (スレッド関数管理に使用される) を使用する私のソフトウェアの機能を壊し、その理由で削除されました。
ただし、これを行うと問題は解決しました。コンパイラがエラーをスローすることなく、変数を sa.sa_handler に割り当てることができるようになりました。IDE ではまだ存在しないメンバーとして表示されますが (上記のリンクの画像と同じ)、これは小さな問題です。
c++ - 入力信号のみを処理し、C ++を出力しないsigio
シリアルポートuart ttyS0を介して情報を送信する組み込みシステムに取り組んでいます。今、同じシリアルポートからデータを受信したいと思います。そこで、sigaction を使用してシグナル ハンドラーを実装しました。SIGIO シグナルを使用したいのですが、送信するデータが原因で中断が発生するという問題があります。出力信号をブロックするメソッドに条件を入れることはできますか?
c - C - 「そのようなファイルまたはディレクトリはありません」というメッセージを置き換えます
コマンドを実行できないときはいつでも「バイナリの実行エラー: -nameOfBinary-」と表示されるシェルを作成しようとしています。しかし、問題は、「そのようなファイルまたはディレクトリはありません」というメッセージが常に表示されることです。私のコードの一部は次のとおりです。
}
コードをそのまま使用すると、「バイナリの実行エラー: そのようなファイルまたはディレクトリはありません」というメッセージが常に表示されます。これは、私が望むものに近いものです! どうすれば修正できますか?前もって感謝します!