系统监控和命令行环境
shell进程间信号:
由 Ctrl
引发的信号
-
SIGINT (Interrupt Signal, Signal 2)
- 触发方式: 用户按下
Ctrl + C
。 - 功能: 通常用于中断并终止当前前台进程。例如,当你正在运行一个长时间运行的命令时,按下
Ctrl + C
会发送 SIGINT 信号,使得该进程终止。
- 触发方式: 用户按下
-
SIGQUIT (Quit Signal, Signal 3)
- 触发方式: 用户按下
Ctrl + \
。 - 功能: 类似于
SIGINT
,但是SIGQUIT
信号通常会让程序生成一个核心转储(core dump),并终止程序。这对于调试来说非常有用。
- 触发方式: 用户按下
-
SIGTSTP (Terminal Stop Signal, Signal 20)
- 触发方式: 用户按下
Ctrl + Z
。 - 功能: 让当前前台进程暂停(挂起),并将其放置到后台执行。之后可以通过
fg
或bg
命令恢复该进程。
- 触发方式: 用户按下
常见的错误信号
-
SIGSEGV (Segmentation Fault, Signal 11)
- 触发方式: 进程访问了未分配的内存或试图写入一个只读的内存区域。
- 功能: 通常会导致程序异常终止,并生成一个核心转储。
-
SIGTERM (Termination Signal, Signal 15)
- 触发方式: 由
kill
命令默认触发,例如kill <PID>
或kill -TERM <PID>
。 - 功能: 请求进程正常退出。进程可以捕获此信号并执行清理操作,但如果不处理这个信号,进程将被终止。
- 触发方式: 由
-
SIGKILL (Kill Signal, Signal 9)
- 触发方式: 由
kill -KILL <PID>
或kill -9 <PID>
触发。 - 功能: 强制终止进程。该信号无法被捕获或忽略,进程会立即终止。
- 触发方式: 由
-
SIGHUP (Hangup Signal, Signal 1)
- 触发方式: 关闭终端或断开连接时触发,也可以手动通过
kill -SIGHUP <PID>
发送。 - 功能: 通常用于通知进程,终端已经断开连接。许多守护进程会通过此信号重新加载配置文件。
- 触发方式: 关闭终端或断开连接时触发,也可以手动通过
进程执行停止命令:
1. kill
- 功能: 发送信号给指定的进程,常用于终止进程。
- 用法:
kill -TERM <PID>
: 发送SIGTERM
信号,用于优雅地终止进程。kill -STOP <PID>
: 发送SIGSTOP
信号,暂停进程。kill -SIGHUP <PID>
: 发送SIGHUP
信号,通常用于挂起进程。kill -9 <PID>
: 发送SIGKILL
信号,强制终止进程。
2. bg
- 功能: 将暂停的进程继续在后台执行。
- 用法:
bg %1
: 将编号为1
的任务继续在后台执行。
3. fg
- 功能: 将后台运行的进程调回前台。
- 用法:
fg %1
: 将编号为1
的任务调回前台。
4. jobs
- 功能: 列出当前 shell 会话中所有暂停或后台运行的任务。
- 用法: 直接输入
jobs
,显示任务编号和状态。
5. pgrep
- 功能: 查找匹配指定条件的进程 ID。
- 用法:
pgrep sleep
: 查找名称为sleep
的进程的 PID。
6. nohup
- 功能: 运行一个进程,并使其忽略
SIGHUP
信号,这样当关闭终端时进程不会被终止。 - 用法:
nohup sleep 2000 &
: 在后台运行sleep 2000
,忽略挂起信号。
7.pkill
-
功能: 根据进程名称、用户、终端等条件,批量查找并终止符合条件的进程。
-
用法:
pkill <process_name>
: 根据进程名称终止所有符合条件的进程。pkill -U <user_name>
: 终止指定用户运行的所有进程。pkill -f <pattern>
: 使用模式匹配终止进程。
终端多路复用
tmux
-
会话 - 每个会话都是一个独立的工作区,其中包含一个或多个窗口
tmux
开始一个新的会话tmux new -s NAME
以指定名称开始一个新的会话tmux ls
列出当前所有会话- 在
tmux
中输入<C-b> d
,将当前会话分离 tmux a
重新连接最后一个会话。您也可以通过-t
来指定具体的会话- tmux kill-session -t N 关闭当前会话N
-
窗口 - 相当于编辑器或是浏览器中的标签页,从视觉上将一个会话分割为多个部分
<C-b> c
创建一个新的窗口,使用<C-d>
关闭<C-b> N
跳转到第 N 个窗口,注意每个窗口都是有编号的<C-b> p
切换到前一个窗口<C-b> n
切换到下一个窗口<C-b> ,
重命名当前窗口<C-b> w
列出当前所有窗口
-
面板 - 像 vim 中的分屏一样,面板使我们可以在一个屏幕里显示多个 shell
<C-b> "
水平分割<C-b> %
垂直分割<C-b> <方向>
切换到指定方向的面板,<方向> 指的是键盘上的方向键<C-b> z
切换当前面板的缩放<C-b> [
开始往回卷动屏幕。您可以按下空格键来开始选择,回车键复制选中的部分<C-b> <空格>
在不同的面板排布间切换
出现的问题:
问题1
linux在进入tmux(screen)模式下之后,发现是无法在终端使用鼠标滚轮进行上下翻页拉动的,无法查看上面的终端输出内容了
解决办法:
进入回滚模式(可以操作鼠标滚轮上下翻页):
先按Ctrl+a键,然后释放,然后再按[键即可进入翻页模式。
切换回之前模式:
Ctrl+c
配置文件
常见命令配置:
bash - ~/.bashrc, ~/.bash_profile
git - ~/.gitconfig
vim - ~/.vimrc 和 ~/.vim 目录
ssh - ~/.ssh/config
tmux - ~/.tmux.conf
可移植性:
if [[ "$(uname)" == "Linux" ]]; then {do_something}; fi
# 使用和 shell 相关的配置时先检查当前 shell 类型
if [[ "$SHELL" == "zsh" ]]; then {do_something}; fi
# 您也可以针对特定的设备进行配置
if [[ "$(hostname)" == "myServer" ]]; then {do_something}; fi
远程连接:
ssh_agent
SSH密钥添加到ssh-agent
-
启动
ssh-agent
:eval "$(ssh-agent -s)"
-
添加SSH私钥到
ssh-agent
:ssh-add ~/.ssh/id_rsa
要让 SSH 密钥长期有效并在每次启动时自动加载到
ssh-agent
中,您可以按照以下步骤操作:配置
ssh-agent
在启动时自动运行以确保每次启动 shell 时自动启动
ssh-agent
并加载密钥。添加以下代码段到
~/.zshrc
配置文件中:# 启动 ssh-agent eval "$(ssh-agent -s)" # 自动加载 SSH 密钥 ssh-add -K ~/.ssh/id_ed25519
然后:source ~/.zshrc (输入对应的密码即可
请注意:
-
-K
选项用于在 macOS 上保存密钥到系统的钥匙串中(适用于 macOS 的特性)。 - 如果您使用的是其他类型的密钥(例如
id_rsa
),将文件路径替换为相应的密钥路径。