sysmaster/backport-docs-Add-signal-processing-instructions-for-init.patch

185 lines
9.9 KiB
Diff
Raw Normal View History

2023-06-19 15:29:11 +08:00
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