进程就是正在运行的程序。
当你启动一个程序,操作系统会先从硬盘中读取程序文件,然后将程序内容加载入内存中,最后 CPU 执行程序。这就是进程。
进程的基本概念
查看进程
htop
ps (process status)
ps
仅显示本终端中运行的相关进程。
ps aux
显示所有进程。
进程标识符 PID (process identifier)
PID是一个数字,是进程的唯一标识。
挂起、继续或终止进程时可以使用 PID 作为索引。
进程优先级
NI (nice)
取值范围-20~19,通常当前运行的程序NI值为0。NI越高,优先级越低。
指定优先级:
1 | $ nice -n 10 vim # 以 10 为 nice 值运行 vim |
调低 nice 值需要?sudo
。
PRI (priority)
通常PRI = nice + 20。若PRI值是 RT,或者是负数,表明对应的进程有更高的实时性要求(例如内核进程、音频相关进程等)。
进程状态
粗略分:
- 运行态(running)
- 就绪态(ready)
- 阻塞态(blocked)
详细分:
状态 | 缩写表示 | 说明 |
---|---|---|
Running | R | 正在运行/可以立刻运行 |
Sleeping | S | 可以被中断的睡眠 |
Disk Sleep | D | 不可被中断的睡眠 |
Traced / Stopped | T | 被跟踪/被挂起的进程 |
Zombie | Z | 僵尸进程 |
进程控制
信号
信号是 Unix 系列系统中进程之间相互通信的一种机制。
发送信号的 Linux 命令叫作?kill
。
使用?man 7 signal
?查看信号列表。
前后台切换
默认在 shell 中运行的命令都在前台运行。如果需要在后台运行,需要在命令最后加上?&
。
如果需要将前台程序切换到后台,则需要按下 Ctrl + Z 发送 SIGTSTP 使进程挂起,控制权还给 shell。
1 | $ bg %2 # 将2号进程放入后台 |
终止进程
标准的终止进程信号是 SIGTERM,意味着一个进程的自然死亡。
在 htop 中发送信号
按 K 键,在左侧提示栏中选择需要的信号,按回车发送。
kill
1 | $ kill -l # 显示所有信号名称 |
若不加任何参数,只有 PID,kill
将自动使用 15 (SIGTERM) 作为信号参数。
类kill命令
1 | $ apropos kill # 显示各种其他的类kill命令 |
脱离终端
nohup
终端一旦被关闭,会向其中每个进程发送 SIGHUP (Signal hangup),而 SIGHUP 的默认动作是退出程序运行。在需要屏蔽 SIGHUP 的程序前添加 nohup
,则运行时的输出将被重定向到 nohup.out
(也可以自定义)。
tmux
tmux 是一个分屏的、运行在命令行的模拟终端。它可以将多个交互进程集成在在一个窗口上,并且不因断开连接或者暂时登出而消失,而是保存在后台,下一次登录时可以立即还原。
tmux 分为三部分:
- 会话 (session):用于区分不同的工作;
- 窗口 (window):会话中以显示屏为单位的不同的页;
- 面板 (pane):窗口上被白线分割的不同区域。
安装和打开tmux:
1 | $ sudo apt install tmux |
快捷键(先 Ctrl + B) | 功能 |
---|---|
% | 左右分屏 |
“ | 上下分屏 |
↑ ↓ ← → | 焦点切换为上、下、左、右侧 pane,正在交互的 pane 被绿色框选中。 |
d (detach) | 从 tmux 中脱离,回到命令行界面 |
z (zoom) | 将 pane 暂时全屏,再按一次恢复原状 |
c | 新建窗口 |
, | 为窗口命名 |
s | 列出所有 session |
如果掉线,再次登录时使用?tmux attach [-t 窗口名称]
重新连接窗口,不加?-t
则默认连接最后一次打开的窗口。
定制tmux
服务
守护进程
只有启动时脱离会话才能避免因为终端的关闭而消失。这类一直默默工作于后台的进程被称为守护进程?(daemon)。
服务管理
绝大多数 Linux 发行版的 init 方案是 systemd,其管理系统服务的命令是?systemctl
。
使用 systemctl status
?命令查看系统中正在运行的服务的情况。使用 systemctl list-units
查看所有 systemd 管理的服务的情况。
使用 tldr
查看服务的启动、终止、重载配置等命令。
自定义服务
编写 .service 配置文件并运行。
例行性任务
指实现周期性的定时任务。在 Linux 中主要有 at
和 crontab
。
at
at
负责单次计划任务。
安装:
1 | $ sudo apt install at |
使用 tldr
查看使用方法。
crontab
crontab
负责周期性的任务。
与 at
不同的是,crontab
大多通过配置文件实现。
查看 crontab
的用法:
1 | $ crontab --help |
配置格式:每一行前半段为时间,后半段为 shell 执行命令。
1 | # 分 时 日 月 星期 | 命令 |
crontab.guru网站可以将配置文件中的时间字段翻译为通俗易懂的表示。
附录
参考教程
Linux 101 - chap 04: 进程、前后台、服务与例行性任务
推荐阅读
评论