COVER PAGE
-
-
Save KuRRe8/1d983d0d13e72309fc7b8cdb7d242974 to your computer and use it in GitHub Desktop.
Linux related knowledge
Jetson (Ubuntu 22.04) 黑屏/无图形诊断结论:
- 机器可 SSH,系统已启动,不是硬件死机。
- apt history 显示 remove gnome-calendar/gnome-keyring 等时,连带卸载了:
- gdm3
- gnome-shell
- ubuntu-session
- ubuntu-desktop/minimal
- 先恢复最小图形链路:gdm3 + gnome-shell + ubuntu-session(keyring 可后装)
- 桌面异常(无图标/无框选)是因扩展缺失,补装:
- gnome-shell-extension-ubuntu-dock
- gnome-shell-extension-desktop-icons-ng
- gnome-shell-extension-appindicator
- 重登/重启后恢复正常。
之后尽量避免 apt remove 直接删 GNOME 组件,先 apt -s remove ... 预演。
信号机制是Linux系统下进程间通信IPC的一种简单方式,本质是软件中断。(其他IPC还有管道,消息,共享内存,套接字)。 在C语境通过<signal.h>使用,在shell中通过kill或者快捷键发送信号。
大部分shell会在内部实现kill而不调用外部的/usr/bin/kill,这样的好处是Linux系统资源占满无法新建文件描述符时候,依旧能执行kill。
通过kill -l可以查看所有的信号。
这类信号主要由终端驱动程序触发,用于管理前后台作业、窗口缩放及用户交互中断。Windows使用SetConsoleCtrlHandler()或者C库中的模拟signal函数来实现类似功能。
| 序号 | 信号名 | 含义 | 默认行为 |
|---|---|---|---|
| 1 | SIGHUP | 终端连接断开(挂断) | 通知终止进程,守护进程重新加载配置重启 |
| 2 | SIGINT | 用户中断(Ctrl+C) | 优雅终止进程 |
| 3 | SIGQUIT | 用户退出(Ctrl+\) | 优雅终止并 Core Dump |
| 18 | SIGCONT | 继续运行暂停的进程 | 继续运行 |
| 19 | SIGSTOP | 暂停进程(不可捕获/忽略) | 强制暂停进程 |
| 20 | SIGTSTP | 终端暂停信号(Ctrl+Z) | 优雅暂停进程到后台,程序可以暂停前清理终端状态,比如切换回显,切换回主缓冲区 |
| 21 | SIGTTIN | 后台进程尝试读取终端 | 暂停进程,避免后台读取当前stdin |
| 22 | SIGTTOU | 后台进程尝试写入终端 | 如果设置了stty tostop,暂停进程,避免后台进程写入当前stdout |
| 28 | SIGWINCH | 终端窗口大小改变 | 对于意图全屏的程序需要改变自身大小 |
这类信号通常由系统管理指令(如 kill)或进程逻辑主动触发,用于协调多个进程的运行状态。Windows下一般也是API例如TerminateProcess()来实现。
| 序号 | 信号名 | 功能 | 默认行为 |
|---|---|---|---|
| 9 | SIGKILL | 强制杀死进程(不可捕获/忽略) | 立即终止 |
| 10 | SIGUSR1 | 用户自定义信号 1 | 终止进程 |
| 12 | SIGUSR2 | 用户自定义信号 2 | 终止进程 |
| 13 | SIGPIPE | 管道破裂(写无读端的管道) | 终止进程 |
| 14 | SIGALRM | 定时器超时(alarm) | 终止进程 |
| 15 | SIGTERM | 终止请求(kill 默认信号) | 优雅终止,功能类似SIGINT,只不过是直接进程调用api而不是终端输入 |
| 17 | SIGCHLD | 子进程停止或退出 | 忽略 |
| 23 | SIGURG | 套接字上有紧急数据 | 忽略 |
| 26 | SIGVTALRM | 虚拟定时器超时 | 终止进程 |
| 27 | SIGPROF | 分析定时器超时 | 终止进程 |
| 29 | SIGIO | 文件描述符准备好 I/O | 终止进程 |
| 30 | SIGPWR | 电源故障(UPS 通知) | 终止进程 |
| 34-64 | SIGRTMIN-MAX | 实时信号(支持排队与携带数据) | 终止进程 |
这类信号通常由 CPU 硬件异常或内核检测到的严重软件错误触发。在Windows下处理错误一般是内核态结构化异常处理SEH,跳转到异常向量表而不是通过发送信号。
| 序号 | 信号名 | 功能 | 默认行为 |
|---|---|---|---|
| 4 | SIGILL | 非法指令 | 终止并 Core Dump |
| 5 | SIGTRAP | 断点/跟踪陷阱(调试用) | 终止并 Core Dump |
| 6 | SIGABRT | 来自 abort() 的异常终止 | 终止并 Core Dump |
| 7 | SIGBUS | 总线错误(内存对齐/物理故障) | 终止并 Core Dump |
| 8 | SIGFPE | 算术异常(如除以零) | 终止并 Core Dump |
| 11 | SIGSEGV | 段错误(非法内存访问) | 终止并 Core Dump |
| 16 | SIGSTKFLT | 协处理器栈错误(已废弃) | 终止进程 |
| 24 | SIGXCPU | 超过 CPU 时间限制 | 终止并 Core Dump |
| 25 | SIGXFSZ | 超过文件大小限制 | 终止并 Core Dump |
| 31 | SIGSYS | 非法的系统调用 | 终止并 Core Dump |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment