sysmaster/backport-docs-Add-signal-processing-instructions-for-init.patch
2023-06-19 15:29:11 +08:00

185 lines
9.9 KiB
Diff
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

From cef18c1e65333230fc8a9c45219a1c91105026c6 Mon Sep 17 00:00:00 2001
From: huyubiao <h13958451065@163.com>
Date: Tue, 6 Jun 2023 05:18:09 +0800
Subject: [PATCH] docs: Add signal processing instructions for init
---
core/bin/unit/util/unit_file.rs | 2 +-
docs/man/signal.md | 147 +++++++++++++++++---------------
2 files changed, 79 insertions(+), 70 deletions(-)
diff --git a/core/bin/unit/util/unit_file.rs b/core/bin/unit/util/unit_file.rs
index 0871703..d1f0bba 100644
--- a/core/bin/unit/util/unit_file.rs
+++ b/core/bin/unit/util/unit_file.rs
@@ -157,7 +157,7 @@ impl UnitFileData {
continue;
}
let real_path = tmp.parent().unwrap().join(real_path);
- let real_path = fs::canonicalize(&real_path).unwrap();
+ let real_path = fs::canonicalize(real_path).unwrap();
let path_toml = format!("{}.toml", real_path.to_string_lossy());
let to = Path::new(&path_toml);
if let Err(e) = std::fs::copy(&real_path, to) {
diff --git a/docs/man/signal.md b/docs/man/signal.md
index 6a61a25..3bf5253 100644
--- a/docs/man/signal.md
+++ b/docs/man/signal.md
@@ -1,75 +1,84 @@
# sysmaster的信号处理
-sysMaster采用`1+1+N`架构sysmaster不再作为init进程因此内核为init进程的信号做的特殊处理不再生效。下表列出了sysMaster与systemd针对不同信号的响应逻辑差异。
+sysMaster采用`1+1+N`架构sysmaster不再作为1号进程因此内核为1号进程的信号做的特殊处理不再生效。下表列出了init(1号进程)、sysmaster、systemd的信号处理方式以及sysMaster与systemd针对不同信号的响应逻辑差异。
-|信号|sysmaster|systemd|对外表现是否有差异|
-|-|-|-|-|
-|1) SIGHUP|daemon-reexec|daemon-reload|N|
-|2) SIGINT|start ctrl-alt-del.target|start ctrl-alt-del.target|N|
-|3) SIGQUIT|crash handler|crash handler|N|
-|4) SIGILL|crash handler|crash handler|N|
-|5) SIGTRAP|IGN|DFL|N|
-|6) SIGABRT|crash handler|crash handler|N|
-|7) SIGBUS|crash handler|crash handler|N|
-|8) SIGFPE|crash handler|crash handler|N|
-|9) SIGKILL|DFL|内核主动屏蔽该信号|Y|
-|10) SIGUSR1|IGN|重连dbus|Y|
-|11) SIGSEGV|crash handler|crash handler|N|
-|12) SIGUSR2|IGN|输出所有单元的配置信息|Y|
-|13) SIGPIPE|IGN|IGN|N|
-|14) SIGALRM|IGN|DFL|N|
-|15) SIGTERM|daemon-reexec|daemon-reexec|N|
-|16) SIGSTKFLT|IGN|DFL|N|
-|17) SIGCHLD|子进程回收|子进程回收|N|
-|18) SIGCONT|IGN|DFL|N|
-|19) SIGSTOP|DFL|内核主动屏蔽该信号|Y|
-|20) SIGTSTP|IGN|DFL|N|
-|21) SIGTTIN|IGN|DFL|N|
-|22) SIGTTOU|IGN|DFL|N|
-|23) SIGURG|IGN|DFL|N|
-|24) SIGXCPU|IGN|DFL|N|
-|25) SIGXFSZ|IGN|DFL|N|
-|26) SIGVTALRM|IGN|DFL|N|
-|27) SIGPROF|IGN|DFL|N|
-|28) SIGWINCH|IGN|start kbrequest.target|Y|
-|29) SIGIO|IGN|DFL|N|
-|30) SIGPWR|IGN|start sigpwr.target|Y|
-|31) SIGSYS|IGN|DFL|N|
-|34) SIGRTMIN|IGN|start default.target|Y|
-|35) SIGRTMIN+1|IGN|isolate rescue.target|Y|
-|36) SIGRTMIN+2|IGN|isolate emergency.target|Y|
-|37) SIGRTMIN+3|IGN|start halt.target|Y|
-|38) SIGRTMIN+4|IGN|start poweroff.target|Y|
-|39) SIGRTMIN+5|IGN|start reboot.target|Y|
-|40) SIGRTMIN+6|IGN|start kexec.target|Y|
-|41) SIGRTMIN+7|daemon-reexec|DFL|Y|
-|42) SIGRTMIN+8|IGN|DFL|N|
-|43) SIGRTMIN+9|IGN|DFL|N|
-|44) SIGRTMIN+10|switch root|DFL|Y|
-|45) SIGRTMIN+11|IGN|DFL|N|
-|46) SIGRTMIN+12|IGN|DFL|N|
-|47) SIGRTMIN+13|IGN|Immediate halt|Y|
-|48) SIGRTMIN+14|IGN|Immediate poweroff|Y|
-|49) SIGRTMIN+15|IGN|Immediate reboot|Y|
-|50) SIGRTMAX-14 SIGRTMIN+16|IGN|Immediate kexec|Y|
-|51) SIGRTMAX-13 SIGRTMIN+17|IGN|DFL|N|
-|52) SIGRTMAX-12 SIGRTMIN+18|IGN|DFL|N|
-|53) SIGRTMAX-11 SIGRTMIN+19|IGN|DFL|N|
-|54) SIGRTMAX-10 SIGRTMIN+20|IGN|enable status messages|Y|
-|55) SIGRTMAX-9 SIGRTMIN+21|IGN|disable status messages|Y|
-|56) SIGRTMAX-8 SIGRTMIN+22|IGN|日志级别设为debug|Y|
-|57) SIGRTMAX-7 SIGRTMIN+23|IGN|日志级别设为info|Y|
-|58) SIGRTMAX-6 SIGRTMIN+24|IGN|Immediate exit (仅限于用户模式)|Y|
-|59) SIGRTMAX-5 SIGRTMIN+25|IGN|reexecute manager|Y|
-|60) SIGRTMAX-4 SIGRTMIN+26|IGN|日志输出设为journal-or-kmsg|Y|
-|61) SIGRTMAX-3 SIGRTMIN+27|IGN|日志输出设为console|Y|
-|62) SIGRTMAX-2 SIGRTMIN+28|IGN|日志输出设为kmsg|Y|
-|63) SIGRTMAX-1 SIGRTMIN+29|IGN|日志输出设为syslog-or-kmsg|Y|
-|64) SIGRTMAX SIGRTMIN+30|IGN|DFL|N|
+|信号|init|sysmaster|systemd|sysmaster与systemd对外表现是否有差异|
+|-|-|-|-|-|
+|1) SIGHUP|捕获不处理|daemon-reexec|daemon-reload|N|
+|2) SIGINT|捕获不处理|start ctrl-alt-del.target|start ctrl-alt-del.target|N|
+|3) SIGQUIT|捕获不处理|故障恢复|crash handler|Y|
+|4) SIGILL|捕获不处理|故障恢复|crash handler|Y|
+|5) SIGTRAP|捕获不处理|IGN|DFL|N|
+|6) SIGABRT|捕获不处理|故障恢复|crash handler|Y|
+|7) SIGBUS|捕获不处理|故障恢复|crash handler|Y|
+|8) SIGFPE|捕获不处理|故障恢复|crash handler|Y|
+|9) SIGKILL|内核主动屏蔽该信号|DFL|内核主动屏蔽该信号|Y|
+|10) SIGUSR1|捕获不处理|IGN|重连dbus|Y|
+|11) SIGSEGV|捕获不处理|故障恢复|crash handler|Y|
+|12) SIGUSR2|捕获不处理|IGN|输出所有单元的配置信息|Y|
+|13) SIGPIPE|捕获不处理|IGN|IGN|N|
+|14) SIGALRM|捕获不处理|IGN|DFL|N|
+|15) SIGTERM|捕获不处理|daemon-reexec|daemon-reexec|N|
+|16) SIGSTKFLT|捕获不处理|IGN|DFL|N|
+|17) SIGCHLD|僵尸子进程回收|僵尸子进程回收|僵尸子进程回收|N|
+|18) SIGCONT|捕获不处理|IGN|DFL|N|
+|19) SIGSTOP|内核主动屏蔽该信号|DFL|内核主动屏蔽该信号|Y|
+|20) SIGTSTP|捕获不处理|IGN|DFL|N|
+|21) SIGTTIN|捕获不处理|IGN|DFL|N|
+|22) SIGTTOU|捕获不处理|IGN|DFL|N|
+|23) SIGURG|捕获不处理|IGN|DFL|N|
+|24) SIGXCPU|捕获不处理|IGN|DFL|N|
+|25) SIGXFSZ|捕获不处理|IGN|DFL|N|
+|26) SIGVTALRM|捕获不处理|IGN|DFL|N|
+|27) SIGPROF|捕获不处理|IGN|DFL|N|
+|28) SIGWINCH|捕获不处理|IGN|start kbrequest.target|Y|
+|29) SIGIO|捕获不处理|IGN|DFL|N|
+|30) SIGPWR|捕获不处理|IGN|start sigpwr.target|Y|
+|31) SIGSYS|捕获不处理|故障恢复|DFL|N|
+|34) SIGRTMIN|捕获不处理|IGN|start default.target|Y|
+|35) SIGRTMIN+1|捕获不处理|IGN|isolate rescue.target|Y|
+|36) SIGRTMIN+2|捕获不处理|IGN|isolate emergency.target|Y|
+|37) SIGRTMIN+3|捕获不处理|IGN|start halt.target|Y|
+|38) SIGRTMIN+4|捕获不处理|IGN|start poweroff.target|Y|
+|39) SIGRTMIN+5|捕获不处理|IGN|start reboot.target|Y|
+|40) SIGRTMIN+6|捕获不处理|IGN|start kexec.target|Y|
+|41) SIGRTMIN+7|捕获不处理|daemon-reexec|DFL|Y|
+|42) SIGRTMIN+8|unrecover state|IGN|DFL|N|
+|43) SIGRTMIN+9|重执行sysmaster|IGN|DFL|N|
+|44) SIGRTMIN+10|switch root|IGN|DFL|Y|
+|45) SIGRTMIN+11|捕获不处理|IGN|DFL|N|
+|46) SIGRTMIN+12|捕获不处理|IGN|DFL|N|
+|47) SIGRTMIN+13|捕获不处理|IGN|Immediate halt|Y|
+|48) SIGRTMIN+14|捕获不处理|IGN|Immediate poweroff|Y|
+|49) SIGRTMIN+15|捕获不处理|IGN|Immediate reboot|Y|
+|50) SIGRTMAX-14 SIGRTMIN+16|捕获不处理|IGN|Immediate kexec|Y|
+|51) SIGRTMAX-13 SIGRTMIN+17|捕获不处理|IGN|DFL|N|
+|52) SIGRTMAX-12 SIGRTMIN+18|捕获不处理|IGN|DFL|N|
+|53) SIGRTMAX-11 SIGRTMIN+19|捕获不处理|IGN|DFL|N|
+|54) SIGRTMAX-10 SIGRTMIN+20|捕获不处理|IGN|enable status messages|Y|
+|55) SIGRTMAX-9 SIGRTMIN+21|捕获不处理|IGN|disable status messages|Y|
+|56) SIGRTMAX-8 SIGRTMIN+22|捕获不处理|IGN|日志级别设为debug|Y|
+|57) SIGRTMAX-7 SIGRTMIN+23|捕获不处理|IGN|日志级别设为info|Y|
+|58) SIGRTMAX-6 SIGRTMIN+24|捕获不处理|IGN|Immediate exit (仅限于用户模式)|Y|
+|59) SIGRTMAX-5 SIGRTMIN+25|捕获不处理|IGN|reexecute manager|Y|
+|60) SIGRTMAX-4 SIGRTMIN+26|捕获不处理|IGN|日志输出设为journal-or-kmsg|Y|
+|61) SIGRTMAX-3 SIGRTMIN+27|捕获不处理|IGN|日志输出设为console|Y|
+|62) SIGRTMAX-2 SIGRTMIN+28|捕获不处理|IGN|日志输出设为kmsg|Y|
+|63) SIGRTMAX-1 SIGRTMIN+29|捕获不处理|IGN|日志输出设为syslog-or-kmsg|Y|
+|64) SIGRTMAX SIGRTMIN+30|捕获不处理|IGN|DFL|N|
表格的具体说明:
-1. IGN、DFL分别表示信号处理函数SIG_IGN忽略、SIG_DFL缺省的信号处理函数。如果init进程没有注册信号处理函数即使用SIG_DFL内核会直接屏蔽掉该信号。因此在对外表现上SIG_IGN和SIG_DFL是一致的。
-2. SIGKILL、SIGSTOP信号是内核为init进程无条件屏蔽的且不允许通过sigaction修改其信号处理函数sysmaster当前没有方案消除该差异。
-3. SIGUSR1、SIGUSR2、SIGWINCH、SIGPWR、SIGRTMIN+{0-6、13-16、20-29}的差异后续能够消除。
-4. SIGRTMIN+7在sysMaster中为init进程发给sysmaster进程主动触发热重启。SIGRTMIN+10在sysMaster中为init进程发给sysmaster执行switch root。
+1. IGN、DFL分别表示信号处理函数SIG_IGN忽略、SIG_DFL缺省的信号处理函数。如果1号进程没有注册信号处理函数即使用SIG_DFL内核会直接屏蔽掉该信号。因此1号进程在对外表现上SIG_IGN和SIG_DFL是一致的。
+2. SIGKILL、SIGSTOP信号是内核为1号进程无条件屏蔽的且不允许通过sigaction修改其信号处理函数sysmaster当前没有方案消除该差异。
+3. init进程
+ - SIGCHLD: 回收所有僵尸子进程。
+ - SIGRTMIN+8: 进入不可恢复状态。
+ - SIGRTMIN+9: 下发重执行sysmaster信号。
+ - SIGRTMIN+10: 只处理sysmaster进程的SIGRTMIN+10信号其余进程忽略。重执行init自身重执行sysmaster。
+ - init捕获所有可捕获信号除上述信号做了处理以外其余都忽略不处理。
+4. sysmaster进程
+ - SIGCHLD: 回收所有僵尸子进程。
+ - SIGSEGV,SIGILL,SIGFPE,SIGBUS,SIGQUIT,SIGABRT,SIGSYS: 故障恢复重执行sysmaster。
+ - SIGRTMIN+7: 只处理init进程下发的SIGRTMIN+7信号sysmaster接收到该信号后主动触发热重启。
+ - SIGUSR1、SIGUSR2、SIGWINCH、SIGPWR、SIGRTMIN+{0-6、13-16、20-29}sysmaster与systemd的差异后续能够消除。
--
2.33.0