私は信号に関する完全な情報を知りたいです。たとえば、信号を処理できるかどうかをSIGTTIN
知りたいです。SIGTTIN
これ文書シグナルについて以下を説明してくださいSIGTTIN
。
SIGTTIN 21,21,26 バックグラウンドプロセスを停止する端末入力
そして、man SIGTTIN
端末に入力すると何も返されません。
編集する:
プロセスにどの信号を送信できるかではなく、信号を受信するプロセスが信号のデフォルトの動作を変更できるかどうかを意味します。例:SIGTTIN
信号のデフォルトの動作はプロセスを停止することです。sigaction()
この機能を使用して、プログラムでこの既定の動作を変更できます。これで、一部の信号はデフォルトの動作を変更できません。それが私が探しているものです(どのシグナルがデフォルトの動作を変更することを許可しないかについてのドキュメント)。
答え1
通常、正しいこのコマンドを使用できます。
kill -l | egrep SIGTTIN
SIGTTINをキャプチャしてバックグラウンドで実行し、SIGTTINハンドラを実行すると、簡単な診断メッセージを印刷する高速PERLスクリプトを作成することもできます。
答え2
信号を完全に無視したり、信号ハンドラを設置したりする以外に、信号のデフォルト動作を変更することはできないと思います。sigaction(2)
説明する:
sa_handlersignumに関連付けられた動作を指定し、デフォルトの動作にすることができ、
SIG_DFL
このSIG_IGN
信号を無視するか、信号処理機能へのポインタにすることができます。この関数は信号番号を唯一のパラメータとして受け取ります。
信号の動作を他の基本動作の1つに変更するには、別の信号を生成して目的のタスク(コアダンプのインポートまたはプロセスの停止)を実行するか、単に終了(プロセス終了)することができます。
SIGKILL
SIGSTOP
キャプチャまたはブロックできない2つの信号です。sigaction(2)
:
兆候
SIGKILL
sum以外の有効な信号である可能性がある信号を指定しますSIGSTOP
。
そしてsignal(7)
:
これらの信号はキャプチャ、ブロック、または無視
SIGKILL
できません。SIGSTOP
ただし、実際のエラー(誤ったメモリアクセス、誤ったコマンド)からの信号を無視すると、プロセスは非常に安定したままにならない可能性があります。