Linux 进程管理

内容纲要

查看【Linux】专题可浏览更多内容

查看进程

ps

ps 是最常见的用来查看进程的命令

默认不带任何选项参数的 ps 结果显示的内容较少,所以可以搭配一些选项参数

x 选项,

ps x
    PID TTY      STAT   TIME COMMAND
    594 ?        Ss     0:00 /lib/systemd/systemd --user
    595 ?        S      0:00 (sd-pam)
    612 ?        R      0:00 sshd: toor@pts/0
    613 pts/0    Ss     0:00 -bash
    620 pts/0    R+     0:00 ps x

PID:进程 ID;
TTY:进程的控制终端;
STAT:状态;
TIME:进程消耗的 CPU 时间总和;
COMMAND:启动进程的命令;

其中的 STAT(状态)的含义:

状态含义
D不间断的睡眠(通常是IO)
I闲置的内核线程
R运行或可运行(在运行队列中)
S可中断的睡眠(等待事件的完成)
T被工作控制信号停止
X死亡(不应该被看到)
Z失效(「僵尸」)进程,已终止但未被其父进程清理

除了 x 选项,还比较常见的是 aux-elf,注意前者不带连字符 -

# a 显示所有进程
# u 「面向用户」的输出格式
# x 显示没有控制终端的进程
ps aux | less
# 或
# -e 显示所有进程
# -L 长格式
# -f 完整格式
ps -elf | less

两者的作用相当,区别在于前者是以 BSD 风格输出结果,而后者是以 UNIX 风格输出结果

一些比较有用的示例:

# 按 CPU 占用排序
# %前的 - 用于倒序排序
ps aux --sort=-%cpu | less

# 按内存占用排序
ps aux --sort=-%mem | less

# 按用户查找
ps aux -u root

# 查找指定进程,如查找 firefox
ps aux | grep firefox

top

ps 命令的结果都是静态的,如果想要查看进程的实时动态,可以使用 top 命令

top

要从 top 中退出按 Q

信号

使用 kill -l 可以查看所有信号

一些常用的信号:

编号名称含义
1SIGHUP挂起(hang up)
2SIGINT中断(interrupt),类似在终端按 Ctrl + C
9SIGKILL「杀死」(kill),不会发送给目标进程而逝内核会立即终止进程,应仅在其他终止信号不起作用的情况下作为最后手段
15SIGTERM终止(terminate),kill 命令默认发送的信号
18SIGCONT继续(continue),在 STOP 信号或 TSTP 信号后恢复进程,如 bg 命令与 fg 命令会使用
19SIGSTOP停止(stop),并非终止进程而是暂停,与 KILL 信号一样不会向目标进程发送,所以也不能忽略
20SIGTSTP终端停止(terminal stop),按下 Ctrl + Z 时由终端发送,由进程接受,进程可将其忽略

kill

kill -<信号> <PID>
kill -KILL $(pidof firefox)
kill -9 $(pidof firefox)

killall

killall 用于杀死所有同名进程

killall firefox

pkill

如果只知道进程名的一部分,可以使用 pkill

pkill -9 firef

前台与后台进程

&

如果想要将命令置于后台运行,可以在命令后面加上 &

firefox &
[1] 607

[1] 表示作业编号,607 为 PID

jobs

可以使用 jobs 命令查看作业:

jobs -l
# 作业编号 PID 运行状态 命令
[1]+   607 Stopped (tty output)    firefox

fg

使进程返回前台可以使用 fg 命令:

# % 后加上作业编号
fg %1

在一个命令进行的中途可以临时暂停进程并用作业管理

例如正在复制一个大型文件,但现在有其他任务要进行处理:

cp DVD.iso ./Downloads/DVD.iso

bg

可以按下 Ctrl + Z 并看到作业编号

[1]  + 29734 suspended  cp  10.iso

,待忙完其他事情后再用 fg 命令调回继续完成,还可以使用 bg 命令将其放在后台完成,和 fg 使用方法类似:

bg %1

关闭或重启系统

halt

halt 命令不带选项参数的情况下默认关闭系统但不关闭电源

sudo halt

poweroff

poweroff 命令用于关闭系统及电源

sudo poweroff

reboot

reboot 命令用于重启系统

sudo reboot

shutdown

shutdown 命令对于挂起、关机和重启提供了更多操作空间:

# 立即挂起
sudo shutdown -H now # 相当于 halt

# 立即关机
sudo shutdown -h now # 相当于 poweroff

# 立即重启
sudo shutdown -r now

# 定时关机
sudo shutdown -h +5 # 5分钟后关机

sudo shutown -h 21:00 # 设定时间在 21:00 关机

# 取消定时操作
sudo shutdown -c