0

fork私は子供を対象としたプログラムを持っています。次の信号をキャッチしようとしています:SIGINT、、。SIGPIPESIGTERM

Ctrl+ (SIGINT --afaikcを生成します)では、シグナルハンドラーで実行しているメインプログラムが終了する前に、子プロセスを強制終了するようにします。

今、私の期待/理解Ctrlは、親プロセスが+で自動的に強制終了されることcです。しかし、それは起こっていません。

Ctrl+をオンcにすると、シェルプロンプトが返されますが、でプロセスを確認できますps。だから基本的に私のメインプログラムは殺されていません。

私の理解は間違っていますか?

編集0:1つの観察:Ctrl+の前cpsメインプログラムのステータスは言うSCtrl+の後cI

4

1 に答える 1

0

シグナルハンドラーコードの実行が終了すると強制終了されます。この場合、SIGINTのハンドラーコードに配置したコードが実行されるまで実際には停止しません(正しく記述した場合は子プロセスを閉じる必要があります)。

ハンドラーコードがプロセスを終了させない何かを間違って実行しているようです。CTRL+Cが効果的に実行できるようにSIGINTでSIGIGN(無視)を実行できるため、ハンドラーコードとハンドラーの設定方法を投稿してください。あなたのプログラムには何もありません。

必ずexit(0)またはexit(1)を呼び出すか、エラーコードを指定して、プロセスが終了しない場合はプロセスを終了するように指示してください。

于 2011-08-07T08:29:21.603 に答える