man 7 signal
これは、Linuxシグナル情報を調べるために頻繁に参照する、Linuxマンページプロジェクトの便利な非規範的マンページです。
バージョン3.22は、次のような興味深いことについて言及しています。
シグナルSIGKILLおよびSIGSTOPは、キャッチ、ブロック、または無視できません。
そして、テーブルが含まれています:
Signal Value Action Comment
----------------------------------------------------------------------
SIGHUP 1 Term Hangup detected on controlling terminal
or death of controlling process
SIGINT 2 Term Interrupt from keyboard
SIGQUIT 3 Core Quit from keyboard
SIGILL 4 Core Illegal Instruction
SIGABRT 6 Core Abort signal from abort(3)
SIGFPE 8 Core Floating point exception
SIGKILL 9 Term Kill signal
SIGSEGV 11 Core Invalid memory reference
SIGPIPE 13 Term Broken pipe: write to pipe with no
readers
SIGALRM 14 Term Timer signal from alarm(2)
SIGTERM 15 Term Termination signal
SIGUSR1 30,10,16 Term User-defined signal 1
SIGUSR2 31,12,17 Term User-defined signal 2
SIGCHLD 20,17,18 Ign Child stopped or terminated
SIGCONT 19,18,25 Cont Continue if stopped
SIGSTOP 17,19,23 Stop Stop process
SIGTSTP 18,20,24 Stop Stop typed at tty
SIGTTIN 21,21,26 Stop tty input for background process
SIGTTOU 22,22,27 Stop tty output for background process
Action
SIGQUITにはaction Core
とSIGINT があるため、たとえばSIGQUITとSIGQUITを区別する信号を要約しTerm
ます。
アクションは同じドキュメントに記載されています。
The entries in the "Action" column of the tables below specify the default disposition for each signal, as follows:
Term Default action is to terminate the process.
Ign Default action is to ignore the signal.
Core Default action is to terminate the process and dump core (see core(5)).
Stop Default action is to stop the process.
Cont Default action is to continue the process if it is currently stopped.
カーネルの観点からは、SIGTERMとSIGINTの違いはわかりませんTerm
。どちらにもアクションがあり、両方をキャッチできるからです。それは単なる「一般的な使用規則の区別」であるようです:
- SIGINTは、端末からCTRL-Cを実行するとどうなるかです。
- SIGTERMは、によって送信されるデフォルトのシグナルです。
kill
一部の信号はANSI Cで、その他の信号は
大きな違いは次のとおりです。
- SIGINTとSIGTERMはANSI Cであるため、より移植性が高い
- SIGQUITとSIGKILLは
それらは、C99ドラフトN1256の「7.14信号処理」セクションで説明されています。
- インタラクティブアテンションシグナルのSIGINT受信
- SIGTERMプログラムに送信された終了要求
これにより、SIGINTはインタラクティブなCtrl + Cの良い候補になります。
POSIX 7
POSIX 7はsignal.h
ヘッダー付きの信号を文書化します:https : //pubs.opengroup.org/onlinepubs/9699919799/basedefs/signal.h.html
このページには、次の関心のある表もあり、これまでに確認したことのいくつかについて言及していますman 7 signal
。
Signal Default Action Description
SIGABRT A Process abort signal.
SIGALRM T Alarm clock.
SIGBUS A Access to an undefined portion of a memory object.
SIGCHLD I Child process terminated, stopped,
SIGCONT C Continue executing, if stopped.
SIGFPE A Erroneous arithmetic operation.
SIGHUP T Hangup.
SIGILL A Illegal instruction.
SIGINT T Terminal interrupt signal.
SIGKILL T Kill (cannot be caught or ignored).
SIGPIPE T Write on a pipe with no one to read it.
SIGQUIT A Terminal quit signal.
SIGSEGV A Invalid memory reference.
SIGSTOP S Stop executing (cannot be caught or ignored).
SIGTERM T Termination signal.
SIGTSTP S Terminal stop signal.
SIGTTIN S Background process attempting read.
SIGTTOU S Background process attempting write.
SIGUSR1 T User-defined signal 1.
SIGUSR2 T User-defined signal 2.
SIGTRAP A Trace/breakpoint trap.
SIGURG I High bandwidth data is available at a socket.
SIGXCPU A CPU time limit exceeded.
SIGXFSZ A File size limit exceeded.
BusyBox init
BusyBoxの1.29.2デフォルトreboot
コマンドは、SIGTERMをプロセスに送信し、1秒間スリープしてから、SIGKILLを送信します。これは、さまざまなディストリビューションで共通の慣習のようです。
BusyBoxシステムをシャットダウンする場合:
reboot
initプロセスにシグナルを送信します。
次に、initシグナルハンドラーは次の呼び出しを終了します。
static void run_shutdown_and_kill_processes(void)
{
/* Run everything to be run at "shutdown". This is done _prior_
* to killing everything, in case people wish to use scripts to
* shut things down gracefully... */
run_actions(SHUTDOWN);
message(L_CONSOLE | L_LOG, "The system is going down NOW!");
/* Send signals to every process _except_ pid 1 */
kill(-1, SIGTERM);
message(L_CONSOLE, "Sent SIG%s to all processes", "TERM");
sync();
sleep(1);
kill(-1, SIGKILL);
message(L_CONSOLE, "Sent SIG%s to all processes", "KILL");
sync();
/*sleep(1); - callers take care about making a pause */
}
これはターミナルに出力します:
The system is going down NOW!
Sent SIGTERM to all processes
Sent SIGKILL to all processes
これがその最小の具体例です。
カーネルによって送信されたシグナル