信号に関する完全な情報を知りたいですSIGTTIN
。たとえば、SIGTTIN
信号が処理可能かどうかを知りたいです。
これドキュメンテーション信号については次のようにのみ述べていますSIGTTIN
。
SIGTTIN 21,21,26 バックグラウンドプロセスの端末入力を停止
man SIGTTIN
ターミナルに入力しても何も返されませんでした。
編集:
私が言いたいのは、プロセスに送信できるシグナルではなく、シグナルを受信したプロセスがシグナルのデフォルト アクションを変更できるかどうかです。たとえば、シグナルのデフォルト アクションはSIGTTIN
プロセスを停止することですが、関数を使用してプログラム内でこのデフォルト アクションを変更できますsigaction()
。一部のシグナルでは、デフォルト アクションを変更できません。これが私が探しているものです (デフォルト アクションを変更できないシグナルに関するドキュメント)。
答え1
通常は正しいこのコマンドを使用できます。
kill -l | egrep SIGTTIN
また、SIGTTIN をトラップする簡単な PERL スクリプトを作成し、それをバックグラウンドで実行して、SIGTTIN ハンドラが実行された場合に簡単な診断メッセージを出力することもできます。
答え2
シグナルを完全に無視したり、シグナル ハンドラーをインストールしたりするのと同じように、シグナルのデフォルトのアクションを変更することはできないと思います。sigaction(2)
言う:
sa_ハンドラsignum に関連付けるアクションを指定します。これは、
SIG_DFL
デフォルトのアクション、SIG_IGN
このシグナルを無視するアクション、またはシグナル処理関数へのポインターになります。この関数は、シグナル番号を唯一の引数として受け取ります。
あるシグナルのアクションを他のデフォルト アクションのいずれかに変更する場合は、必要な操作 (コア ダンプを取得するかプロセスを停止する) を実行する別のシグナルを発生させるか、単に exit (プロセスを終了する) を発生させることができます。
SIGKILL
SIGSTOP
キャッチしたりブロックしたりできない 2 つの信号です。sigaction(2)
:
シグナム信号を指定し、 および を除く任意の有効な信号を指定でき
SIGKILL
ますSIGSTOP
。
そしてsignal(7)
:
信号はキャッチしたり、ブロックしたり、無視したりすることはできません
SIGKILL
。SIGSTOP
ただし、実際の障害 (無効なメモリ アクセス、無効な命令) から発生した信号を無視すると、プロセスが安定した状態にならない可能性があります。