Linux进程管理ps

进程概念

进程(Process)是计算机中已运行程序的实体,是程序的一个具体实现。当程序被系统调用到内存以后,系统会给程序分配一定的资源(内存,设备等等)然后进行一系列的复杂操作,使程序变成进程以供系统调用。进程除包含程序的静态代码(text),还包含堆(heap)、栈(stack)、数据(data)段,堆用来在进程正在运行时分配所需的内存,栈用来保存临时数据(如函数参数、返回地址、局部变量),数据段用来保存已初始化的变量。


常见的5种进程状态

  • R(运行)(TASK_RUNNING):
    ● 正在运行或在运行队列中等待。
  • S(中断)(TASK_INTERRUPTIBLE):
    ● 休眠中, 受阻, 在等待某个条件的形成或接受到信号。
  • D(不可中断)(TASK_UNINTERRUPTIBLE) :
    ● 收到信号不唤醒和不可运行, 进程必须等待直到有中断发生。
  • Z(僵死) (TASK_ZOMBIE):
    ● 进程已终止, 但进程描述符存在, 直到父进程调用wait4()系统调用后释放。
  • T(停止)(TASK_STOPED):
    ● 进程收到SIGSTOP, SIGSTP, SIGTIN, SIGTOU信号后停止运行运行。

进程状态变化
在这里插入图片描述


进程常用命令

https://blog.51cto.com/c959c/5331522
进程管理的作用:

  • 判断服务器健康状态
  • 查看系统中所有进程
  • 杀死进程
    在这里插入图片描述
  • pstree
  • top
  • pidof
  • nice
  • killall

ps查看进程

https://www.linuxcool.com/ps
https://wangchujiang.com/linux-command/c/ps.html
ps命令: ps命令是最基本又非常强大的进程查看命令。使用该命令可以确定有哪些进程正在运行和运行的状态、进程是否结束、进程有没有僵尸、哪些进程占用了过多的资源等,大部分进程信息都是可以通过执行该命令得到的。例如显示系统中终端上的所有进行进程。

选项描述
-e显示所有进程,而不仅仅是当前用户的进程
-f显示完整的进程信息,包括进程的命令行参数
-L显示每个线程的详细信息
-h不显示标题
-l使用长格式
-w宽行输出
-a显示终端上的所有进程,包括其他用户的进程
-r只显示正在运行的进程
-x显示没有控制终端的进程

查看安全信息

参数 -e 显示所有进程信息,-o 参数控制输出。Pid,UserArgs参数显示PID,运行应用的用户和该应用。

## -e 显示所有进程信息
## -o 参数控制输出
ps -eo pid,user,args

在这里插入图片描述


ps查看所有进程

# -a 显示所有用户进程
ps -a

在这里插入图片描述

## -A 显示所有用户的进程;
## -f 进程名、完整格式的命令行参数等;
## -H 显示进程树结构,以展示父进程与子进程之间的关系。
ps -AfH

在这里插入图片描述

# 以Linux查看系统中所有进程名(只显示进程名)
## -A 显示所有程序
ps -A

## -e:此选项的效果和指定"A"选项相同。
### e:列出程序时,显示每个程序所使用的环境变量。
ps -e

在这里插入图片描述
在这里插入图片描述


BSD风格打印
# BSD风格打印查看系统中所有进程
## -a 所有用户
## -u 以用户为主的格式来显示程序状况
## -x 显示所有程序(带程序路径)
ps aux

在这里插入图片描述


ps常用查看命令按内存或CPU排序
# 以内存占用排序
ps -eo pid,ppid,cmd,%mem,%cpu --sort=%mem | head

# 以CPU占用排序
ps -eo pid,ppid,cmd,%mem,%cpu --sort=%cpu | head

# 动态查看
watch -n 1 'ps -eo pid,ppid,cmd,%mem,%cpu --sort=%mem |head'

在这里插入图片描述


完整格式
# 完整格式
ps -ef

ps常见问题

ps命令使用中出现的一些常见问题


调整进程优先级

https://blog.csdn.net/omaidb/article/details/118720971


ps -aux显示不全被截断

PS命令默认显示的命令长度只有80字符,后面的字符会被截断.

# 不使用-
ps aux

在这里插入图片描述

# -ww 禁止截断
ps -auxww

在这里插入图片描述


查看僵尸进程

# 查看僵尸进程
## stat 进程的状态
## lstart 命令开始的时间
## etime 启动了多长时间
ps -A -o stat,ppid,pid,lstart,etime,cmd | egrep "^[Z z]"

# 查看僵尸进程产生的时间
ps -eo pid,lstart,etime,cmd|grep anacron

查看进程目录

Linux进程保存在/proc/;
查看/proc 目录,发现目录下很多以数字开头的目录,
这个数字目录就是 进程号;里面就是进程的内容;
cd /proc/进程号,每个进程号都会生成一个目录,fb目录下是当前进程的活动
在这里插入图片描述


/proc目录下的数字,就是进程号

# 查看进程目录
ls /proc/

在这里插入图片描述


pstree查看进程树

# 先要安装psmisc
yum install psmisc -y

# 查看进程树
pstree

在这里插入图片描述


top查看动态进程

# 查看动态进程
top

## -c 提供完整的进程路径及名称
## -d 5 设定每隔5秒刷新一次信息
top -cd5

在这里插入图片描述

# 查看线程ID 
## top默认只能查看进程ID,—H查看线程ID
top -H

在这里插入图片描述


按cpu排序

top -c 按住shift键+p


按内存排序

top -c 按住shift键+m


top查看指定pid

## -c 提供完整的进程路径及名称
## -d 5 设定每隔5秒刷新一次信息
## -p pid 查看指定pid的资源占用
top -cd 5 -p ${pid}

在这里插入图片描述


htop

# 安装epel源
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo

# 安装htop
yum install htop -y

# 查看
htop

glances

# 安装glances
pip3 install glances

# 执行glances
glances

在这里插入图片描述


kill操作进程

在这里插入图片描述

下面是常用的信号。
只有第9种信号(SIGKILL)才可以无条件终止进程,其他信号进程都有权忽略

编号信号名含义
0EXIT程序退出时收到该信息。
1HUP终端挂断
挂掉电话线或终端连接的挂起信号,这个信号也会造成某些进程在没有终止的情况下重新初始化。
2INT中断(同 Ctrl + C)
表示结束进程,但并不是强制性的,常用的 “Ctrl+C” 组合键发出就是一个 kill -2 的信号。
3QUIT退出(同 Ctrl + \)
9KILL强制终止
杀死进程,即强制结束进程。
11SEGV段错误。
15TERM正常结束进程,是 kill 命令的默认信号。
18CONT继续(与STOP相反,fg/bg命令)
19STOP暂停(同 Ctrl + Z)

kill列出信号名称

https://wangchujiang.com/linux-command/c/kill.html

# 查看可:
kill -l

在这里插入图片描述

编号解释
1)SIGHUP终端挂断;
挂起信号,通常用于重新加载配置文件。当进程接收到 SIGHUP 时,它会重新读取配置文件,以便更新其行为。
2)SIGINT中断信号,通常由终端用户通过键盘输入 CTRL+C 生成。它用于中断正在运行的进程。
3)SIGQUIT退出信号。退出(同 Ctrl + \\);类似于 SIGINT,但生成的堆栈跟踪信息更详细。它通常用于指示进程退出,并生成调试信息。
4)SIGILL非法指令信号。当进程尝试执行非法、损坏或不支持的指令时,会收到此信号。
5)SIGTRAP跟踪陷阱信号。通常由调试器用于实现断点和跟踪功能。
6)SIGABRT中止信号。通常由进程自身调用 abort() 函数生成,用于指示发生严重错误并终止进程。
7)SIGBUS总线错误信号。当进程访问无效的内存地址或发生与总线操作相关的错误时,会收到此信号。
8)SIGFPE浮点异常信号。当进程执行浮点运算时发生错误,如除以零或浮点溢出,会收到此信号。
9)SIGKILL强制终止信号,会立即终止进程,不允许进行清理操作或资源释放。它是无法被进程捕获或忽略的信号。
10)SIGUSR1用户定义的信号1。可以由进程自定义使用
11)SIGSEGV段错误信号。当进程访问无效的内存区域或发生内存保护违规时,会收到此信号
12)SIGUSR2用户定义的信号2。可以由进程自定义使用
13)SIGPIPE管道破裂信号。当进程向一个已经关闭的管道写入数据时,会收到此信号
14)SIGALRM定时器超时信号。由定时器设定的时间到期时,会收到此信号
15)SIGTERM默认信号,用于请求进程正常终止
进程可以捕获此信号并执行清理操作后终止。
16)SIGSTKFLT协处理器栈错误信号。当协处理器栈发生错误时,会收到此信号
17)SIGCHLD子进程状态变化信号。父进程在子进程终止或停止时会收到此信号
18)SIGCONT继续信号,用于恢复被停止的进程的执行。
继续(与STOP相反,fg/bg命令)
19)SIGSTOP暂停(同 Ctrl + Z);
停止信号,用于暂停进程的执行。与 SIGKILL 不同,SIGSTOP 允许进程在后续恢复。
20)SIGTSTP终端挂起信号。通常由终端用户通过键盘输入 CTRL+Z 生成。用于暂停正在运行的进程
21)SIGTTIN后台读取信号。当后台进程尝试从终端读取时,会收到此信号
22)SIGTTOU后台写入信号。当后台进程尝试向终端写入时,会收到此信号
23)SIGURG紧急情况信号。用于指示套接字上发生紧急情况
24)SIGXCPUCPU 时间超时信号。当进程的 CPU 时间超过限制时,会收到此信号
25)SIGXFSZ文件大小超过限制信号。当进程尝试创建或写入文件超过大小限制时,会收到此信号
26)SIGVTALRM虚拟定时器超时信号。由虚拟定时器设定的时间到期时,会收到此信号
27)SIGPROF分析器定时器超时信号。由分析器定时器设定的时间到期时,会收到此信号
28)SIGWINCH窗口大小改变信号。当终端窗口大小发生变化时,会收到此信号
29)SIGIOI/O 可用信号。用于指示关联的 I/O 设备上有数据可读取或写入
30)SIGPWR电源故障信号。用于指示电源供应故障
31)SIGSYS无效系统调用信号。当进程尝试执行无效的系统调用时,会收到此信号
34)SIGRTMIN实时信号的最小编号
35)SIGRTMIN+1实时信号编号的下一个
36)SIGRTMIN+2实时信号编号的下一个
37)SIGRTMIN+3实时信号编号的下一个
38)SIGRTMIN+4实时信号编号的下一个
39)SIGRTMIN+5实时信号编号的下一个
40)SIGRTMIN+6实时信号编号的下一个
41)SIGRTMIN+7实时信号编号的下一个
42)SIGRTMIN+8实时信号编号的下一个
43)SIGRTMIN+9实时信号编号的下一个
44)SIGRTMIN+10实时信号编号的下一个
45)SIGRTMIN+11实时信号编号的下一个
46)SIGRTMIN+12实时信号编号的下一个
47)SIGRTMIN+13实时信号编号的下一个
48)SIGRTMIN+14实时信号编号的下一个
49)SIGRTMIN+15实时信号编号的下一个
50)SIGRTMAX-14实时信号编号的前一个
51)SIGRTMAX-13实时信号编号的前一个
52)SIGRTMAX-12实时信号编号的前一个
53)SIGRTMAX-11实时信号编号的前一个
54)SIGRTMAX-10实时信号编号的前一个
55)SIGRTMAX-9实时信号编号的前一个
56)SIGRTMAX-8实时信号编号的前一个
57)SIGRTMAX-7实时信号编号的前一个
58)SIGRTMAX-6实时信号编号的前一个
59)SIGRTMAX-5实时信号编号的前一个
60)SIGRTMAX-4实时信号编号的前一个
61)SIGRTMAX-3实时信号编号的前一个
62)SIGRTMAX-2实时信号编号的前一个
63)SIGRTMAX-1实时信号编号的前一个
64)SIGRTMAX实时信号的最大编号

kill暂停进程和继续进程

# 暂停进程
kill -s SIGSTOP pid
# 或
kill -STOP pid

# 继续进程
kill -s SIGCONT pid
kill -CONT pid

kill重启进程

# 重启进程:
kill -1 PID

kill根据pid杀死进程

# kill根据pid杀死进程
kill pid

# 强制杀死进程:
kill -9 PID

在这里插入图片描述


killall根据进程名杀死一组进程

https://www.runoob.com/linux/linux-comm-killall.html

# 安装killall命令
yum install psmisc -y

# 结束指定进程名
killall 进程名

# 实例: 结束所有bash
killlall -9 bash

pgrep根据名字查pid

参考: https://www.linuxcool.com/pgrep
https://wangchujiang.com/linux-command/c/pgrep.html

参数解释
-o仅显示找到的最小(起始)进程号;
-n仅显示找到的最大(结束)进程号;
-l显示进程名称;
-P指定父进程号;
-g指定进程组;
-t指定开启进程的终端;
-u指定进程的有效用户ID;
-x与命令名称完全匹配。
# 显示进程名和最小的pid
## -l:显示进程的 PID 和命令行参数
## -o:仅显示与搜索条件匹配的第一个进程
pgrep -lo sshd

在这里插入图片描述

# 显示进程名和最大的pid
## -l:显示进程的 PID 和命令行参数
## -n:仅显示与搜索条件匹配的进程
pgrep -ln sshd

在这里插入图片描述

# 查看以root用户运行的bash进程的pid
## -u 指定用户
pgrep -u root bash

在这里插入图片描述


pidof根据进程名查找pid

参数解释
-s仅返回一个进程号。
-c仅显示具有相同"root"目录的进程。
-x显示由脚本开启的进程。
-o指定不显示的进程ID。
# 根据进程名查找pid
pidof 精确进程名

在这里插入图片描述

仅返回一个nginx进程的进程号:

# 仅返回一个nginx进程的进程号
pidof -s nginx

显示具有相同"root"目录的nginx进程的进程号:

# 显示具有相同"root"目录的nginx进程的进程号
pidof -c nginx

显示由脚本开启的nginx进程的进程号:

# 显示由脚本开启的nginx进程的进程号
pidof -x nginx

指定不显示某个进程ID的nginx进程的进程号:

# 指定不显示某个进程ID的nginx进程的进程号
pidof -o 1234 nginx

pkill根据名字杀死进程

参考: https://wangchujiang.com/linux-command/c/pkill.html

参数释义
-o仅向找到的最小(起始)进程号发送信号
-n仅向找到的最大(结束)进程号发送信号
-p指定父进程号发送信号
-g指定进程组
-t指定要终止的终端会话
-9强制终止信号
-f强制结束进程
-x只匹配精确的进程名
# 查看进程的pid
## -l:显示进程的 PID 和命令行参数
## -o:仅显示与搜索条件匹配的第一个进程
pgrep -lo 进程名字

# 结束指定的进程名
## -x 只匹配精确的进程名
pkill -x 进程名字

示例:

# 查看trojan进程的pid
## -l:显示进程的 PID 和命令行参数
## -o:仅显示与搜索条件匹配的第一个进程
pgrep -lo trojan

# 结束名为trojan的进程
## -x 只匹配精确的进程名
pkill -x trojan

## -f 强制结束进程
pkill -xf trojan

结束ssh会话

# 查看当前登录详情
w

在这里插入图片描述

# 结束pts/0终端会话
## -9 强制终止信号
## -t 指定要终止的终端会话
pkill -9 -t pts/0

虚拟内存状态查看命令vmstat

# 语法:vmstat [options] [delay [count]]
# 表示每2秒刷新一次
vmstat 2

在这里插入图片描述

# 表示每2秒刷新一次,刷新5次后退出     
vmstat 2 5

在这里插入图片描述


Linux进程相关


pwdx查看pid工作目录

# 查看当前pid进程启动时的工作目录
pwdx $pid

在这里插入图片描述


根据pid查看进程完整信息

# 查看进程完整信息
ls –ali /proc/${pid}

cwd符号链接的是进程运行目录;
exe符号连接就是执行程序的绝对路径;
cmdline就是程序运行时输入的命令行命令;
environ记录了进程运行时的环境变量;
fd目录下是进程打开或使用的文件的符号连接。
在这里插入图片描述


查看哪些进程占用内存最多

!!!注意: 该软件只支持Centos7,需要使用epel源安装Dstat 0.7.2RHEL8安装的是pcp-dstat 5.3.1,不支持top-mem等参数

## --top-mem 显示内存使用最多的进程
## 1 4 每隔1秒更新一次,总共更新4次后停止
dstat --top-mem 1 4

在这里插入图片描述


查看哪些进程占用cpu最多

## --top-mem 显示CPU使用最多的进程
## 1 4 每隔1秒更新一次,总共更新4次后停止
dstat --top-cpu 3 3

在这里插入图片描述


查看进程产生的时间

# 查看僵尸进程产生的时间
ps -eo pid,lstart,etime,cmd|grep anacron

命令后面加&后台运行

  • 前台进程和用户交互,需要较高的响应速度,优先级较高;前台进程就是用户使用的有控制终端的进程。
  • 后台进程几乎不和用户交互,优先级略低。 Linux 的守护进程(Daemon)是一种特殊的后台进程,其独立于终端并周期性地执行任务或等待唤醒

& 使用它在后台运行一个占用时间不长的进程。
nohup 使用它在后台运行一个命令,即使在用户退出时也不受影响。

Linux下常用以下命令管理进程,包括前后台切换及启停:

  • & :将 & 放在命令的最后,可以把这个命令放到后台执行
  • Ctrl + z :当前台正在执行一个命令时,按键 Ctrl + z,将其放到后台并暂停
  • Ctrl + c :中断当前正在执行的命令
  • jobs :查看当前有多少正在后台运行的命令
  • fg :将后台中的命令调至前台继续运行
  • bg :将后台任务唤醒,并在后台运行

将程序放入后台

# 以后台运行程序
exe_name &

在这里插入图片描述


查看运行中的后台运行

# 查看运行中的后台运行
jobs -l

在这里插入图片描述
说明:以上输出表示当前终端有1个后台工作进程sleep,工作号1,状态是运行标志是"+"。 "+"号代表最近一个放入后台的工作,也是工作恢复时默认恢复的工作。 "-"号代表倒数第二个放入后台的工作,而第三个以后的工作没有"+-"标志了。


恢复&后台运行程序为前台运行

# 恢复&后台运行程序为前台运行
fg job_id

在这里插入图片描述


将任务放入后台并且暂停

# 将任务放入后台并且暂停
catl+z

在这里插入图片描述


查看暂停程序

# 查看暂停程序    
job

将暂停的任务恢复后台运行

# 恢复后台运行  
bg job_id

在这里插入图片描述


后台进程&示例

在命令后加上& 就会进入后台进程,但不是所有命令都支持后台

#!/usr/bin/env bash
# 快速检查服务器是否可用
date;
for i in {1..100}; do
    (ping -c 2 rhcsa$i &>>/dev/null && echo "rhcsa$i success" || echo -e "\033[31mrhcsa$i faild\033[0m") &
done
wait;
date

nohup退出账户时进程不结束

nohup&可以不在终端前台运行程序,使用nohup& 符号配合运行一个命令

# 
nohup command &

nohup命令可以在你退出帐户之后继续运行相应的进程。
nohup就是不挂起的意思(no hang up),该命令使进程忽略hangup(挂起)信号

# 退出终端时不结束进程,并将输出写入到文件
nohup command > myout.file 2>&1

守护进程(daemon)和一般进程有什么差别呢?
在这里插入图片描述


Linux的退出码

https://linux.cn/article-16059-1.html?utm_source=rss&utm_medium=rss

退出码解释
0命令成功执行
1通用错误代码
2命令(或参数)使用不当
126权限被拒绝(或)无法执行
127未找到命令,或 PATH 错误
128+n命令被信号从外部终止,或遇到致命错误
130通过 Ctrl+C 或 SIGINT 终止(终止代码 2 或键盘中断
143通过 SIGTERM 终止(默认终止
255/*退出码超过了 0-255 的范围,因此重新计算(LCTT 译注:超过 255 后,用退出码对 256 取模)
# 查看退出码
echo $?

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

识途老码

赞赏是第一生产力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值