美文网首页
Linux 进程管理

Linux 进程管理

作者: _于曼丽_ | 来源:发表于2020-10-14 10:20 被阅读0次

Linux 中命令便是程序,执行一个程序可以启动一个或多个进程。

查看进程

w

查看当前登录的用户信息

pidof

根据程序名查找该程序启动的进程的 PID

# 查看 VBoxClient 程序启动的所有进程的 PID
[yumanli@punk ~]$ pidof VBoxClient
2165 2161 2158 2156 2152 2151 2141 2139

ps

查看当前时间的进程快照

  • UID: 用户名
  • PID: 进程号
  • PPID: 父进程号
  • TTY: 哪个终端
  • TIME: 进程运行了多久
  • CMD: 产生该进程的程序名(一个程序可以产生多个进程)

ps 不加参数只列出当前用户在当前终端的进程
ps -ef 列出所有用户在所有终端的所有进程
ps -efH 以乔木状列出所有进程
ps -u user1 查看 user1 用户启动的进程
ps -aux 通过 cpu 和内存使用来过滤进程
ps -axjf 以树形结构显示进程
pstree 以树形结构显示进程

# 查看进程
ps -ef | less
# 查看 root 用户启动的进程
ps -u root
# 根据 cpu 使用率来降序排列
ps -aux --sort -pcpu | less
# 根据 内存使用率来升序排列
ps -aux --sort +pmem | less
# 将 cpu 和内存使用率合并到一起,并通过管道显示前 10 个结果
ps -aux --sort -pcpu,+pmem | head

top

查看进程的动态列表,不会显示全部进程,只显示排在前面的进程

交互命令:

  • q: 退出
  • h: 帮助
  • u: 过滤用户
  • k: 结束进程

第三方进程管理软件

glances htop

终止进程

Ctrl + C

Ctrl + C 终止终端中正在运行的进程

kill

kill PID 根据进程 PID 终止进程

标准的 kill 命令通常都能达到目的。终止有问题的进程,并把进程的资源释放给系统。然而,如果进程启动了子进程,只杀死父进程,子进程仍在运行,因此仍消耗资源。为了防止这些所谓的“僵尸进程”,应确保在杀死父进程之前,先杀死其所有的子进程。

# 根据程序名字查看进程 PID
ps -ef | grep httpd
# 终止进程
kill 9000
# 可以同时结束多个进程
kill 9000 9001 9002

kill -9 PID 强制结束进程

这个强大和危险的命令迫使进程在运行时突然终止,进程在结束后不能自我清理。危害是导致系统资源无法正常释放,一般不推荐使用,除非其他办法都无效。

当使用此命令时,一定要通过 ps -ef 确认没有剩下任何僵尸进程。只能通过终止父进程来消除僵尸进程。如果僵尸进程被 init 收养,问题就比较严重了。杀死 init 进程意味着关闭系统。

如果系统中有僵尸进程,并且其父进程是 init,而且僵尸进程占用了大量的系统资源,那么就需要在某个时候重启机器以清除进程表了。

killall

killall 程序名 根据程序名终止该程序启动的所有进程

killall httpd

关闭重启系统

关机:

  • init 0 平稳关机,推荐使用
  • shutdown -h 等价于 init 0
  • halt -p 强制关机,不推荐
  • poweroff 直接关电源,不推荐

重启:

  • init 6 平稳重启,推荐使用
  • showdown -r 等价于 init 6
  • reboot 强制重启,不推荐

后台运行进程

&

在命令最后加上 & 符号,即可在后台运行该命令的所有进程。

# 在后台运行 find 命令,后台运行的进程的输出结果仍然会显示到终端界面
sudo find / -name *.log &
# 使用输出重定向,将输出结果和错误信息都保存到文件,这样就不会显示到终端页面
sudo find / -name *.log > result 2>&1 &

通过 & 符号运行的后台进程与终端相关联,一旦终端关闭或者用户登出,则进程关闭。当用户注销或者网络断开时,终端会收到 HUP 信号从而关闭其所有进程。终端被关闭时也会关闭其所有进程。

nohup

nohup 命令 在后台运行该命令的所有进程,输出结果不会输出到终端,会输出到 nohup.out 文件。进程不受 HUP 信号影响,要想结束进程可以用 kill 命令。

nohup 可以和 & 一起使用

nohup cp file file_copy &

bg

bg 使前台命令转到后台执行

bg %1 可以指定命令的序列号,这个序列号是当前终端执行的命令的序列号,不是 PID。如果不指定序列号,则作用于最近使用的命令。

如果你原本想在后台运行一个命令,但是忘了加 & 符号了,可以按照以下顺序操作:

# 将命令转入后台,并且暂停命令
Ctrl + Z
# 将命令转为执行
bg

fg

fg 使后台命令转到前台执行,不管后台命令的状态如何,转到前台之后都会直接运行。

fg %1 可以指定命令的序列号,这个序列号是当前终端执行的命令的序列号,不是 PID。如果不指定序列号,则作用于最近使用的命令。

jobs

jobs 显示当前终端里的后台进程的状态

进程状态:

  • 运行:R
  • 休眠:S
  • 不可中断:D 进程不响应系统异步信号,即便是 kill 命令也无法终止进程
  • 僵死:Z 进程已终止,但是进程描述符依然存在,直到父进程调用 wait4() 系统函数后释放该进程
  • 停止:T 进程收到 SIGSTOP SIGSTP SIGTIN SIGOU 等停止信号后停止运行

相关文章

网友评论

      本文标题:Linux 进程管理

      本文链接:https://www.haomeiwen.com/subject/guimpktx.html