問題タブ [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.
c - バックグラウンド プロセスのシグナル処理
シンプルな Unix シェルを C で実装しようとしていますが、sigaction を使用してバックグラウンド処理機能を実装できませんでした。私のコード構造は次のようなものです:
また、私の execCommand 関数では、構造は次のようになります。
私のハンドラーは次のようなものです:
しかし、この構造は私の実装全体に害を及ぼします。フォアグラウンド プロセスでさえ機能していません。フォアグラウンド コマンドを実行すると、次のようになります。
バックグラウンド コマンドを実行すると、次のようになります。
では、どうすればこの問題を解決できますか?
前もって感謝します...
編集: valgrind でコードをデバッグすると、次のようになります。
c++ - C++ で SIGINT をキャッチしてデストラクタを呼び出すプログラム構造
C ++で割り込み信号を処理してデストラクタを呼び出す方法に関連していますか? ですが、私の質問はプログラムの構造化に関するものです。
HDF5 ファイルにデータを書き出すシミュレーション プログラムを作成しています。ただし、プログラムが中断された場合は、蓄積されたデータを引き続き読み取れるように、HDF5 を適切に閉じてください。HDF5 ファイルへのハンドルを含む HDF5 ライター クラスを作成しました。そのクラスのデストラクタが呼び出されると、HDF5 ファイルが閉じられるはずです。したがって、Ctrl-C によるプログラムの中断が発生した場合は、SIGINT をキャッチしてデストラクタを呼び出したいと考えています。
私の読書によると、SIGINTまたはSIGSTPが発行された場合、デストラクタは呼び出されますか? のハンドラー関数はsigaction
非常に単純で、フラグを変更するだけです。これにより、次のようなプログラムが作成されます (2 番目のリンクからコピー)...
プログラム構造で、プログラムがフラグを頻繁にwhile
チェックできるように、ループ内の部分を十分に短くする必要があることがわかります。quit
しかし、私の問題は、私のプログラムが次のように構成されていることです。
run_simulation
指定された停止基準が満たされるまでシミュレーションを実行します。これには数分または数時間かかる場合があります。プログラムが何らかのフラグを監視するようにセットアップして、SIGINT を適切なタイミングで受信した後にシャットダウンするようにするにはどうすればよいですか?
c - Solaris と Linux 間の sigaction と sigset_t の移植性
Solaris プラットフォームにいくつかのレガシー コードがあり、それを Linux に移植したいと考えていますが、Linux でコンパイル エラーが発生します。Solaris では、次のコード スニペットがあります。
gcc 4.9.2 を使用して Linux でコンパイルしようとすると (Solaris では正常にコンパイルされます)、次のコンパイル エラーが発生します。
... __sigbits[1]
、__sigbits[2]
、__sigbits[3]
についても同様です。
Linuxに同等のものはありますか?