进程管理命令-ps
## ps aux
a:查看所有的终端进程
x:查看所有的非终端进程
u:显示进程的用户
f:查看子进程
[root@qls ~]# ps auxf|grep nginx
o:自定义查看想要看的字段
[root@qls ~]# ps axo user,pid,%cpu,%mem,command
--sort:排序,可以根据ps的所有字段
[root@zls ~]# ps aux --sort %cpu
## 查看pid的额外命令
[root@qls ~]# pgrep nginx
[root@qls ~]# pidof nginx
## 此命令等同于ps -ef|grep nginx|grep -v grep
## 原因,grep使用[]相当于扩展正则,会匹配n的内容也就是变成内容为nginx,而实际上的查询如下图
## 当使用此命令时,后台会自动产生一个进程为ps -ef|grep [n]nginx,这样看后台的命令就和nginx不一致
## 所以这里就是使用ps -ef|grep [n]ginx 可以替代命令ps -ef|grep nginx|grep -v nginx
[root@oldboy app]# ps -ef|grep [n]ginx
root 7573 1 0 18:13 ? 00:00:00 nginx: master process /app/nginx/sbin/nginx
nginx 7574 7573 0 18:13 ? 00:00:00 nginx: worker process
进程管理命令-top
top
top - 09:10:31 up 1 day, 28 min, 1 user, load average: 0.00, 0.01, 0.05
# 09:10:31 :当前系统时间
# up 1 day, 28 min :运行时间
# 1 user :同时在线用户数量
# load average: 0.00, 0.01, 0.05
0.00 : 1分钟的负载
0.01 : 5分钟的负载
0.05 : 15分钟的负载
Tasks: 105 total, 1 running, 104 sleeping, 0 stopped, 0 zombie
# 105 total : 总共有多少个工作任务
# 1 running : 1个在运行
# 104 sleeping : 104个在等待
# 0 stopped:没有停止的
# 0 zombie:没有僵尸进程
%Cpu(s): 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
# 0.0 us : 用户态(user用户使用cpu的百分比)
# 0.0 sy : 内核态(system系统进程占用cpu的百分比)
# 0.0 ni : 优先级
# 100.0 id : CPU空闲程度
# 0.0 wa :(wait等待状态的进程)
# 0.0 hi : 硬中断
# 0.0 si : 软中断
# 0.0 st :虚拟机(如果当前系统安装了虚拟机)KVM,vitural box
-d:指定变化时间
-p:只查看指定PID的进程
-u:只查看指定用户的进程
-b:保存到文件
-n:指定次数
# top 常见指令
h 查看帮出
z 高亮显示
1 显示所有CPU的负载
s 设置刷新时间
b 高亮现实处于R状态的进程
M 按内存使用百分比排序输出
P 按CPU使用百分比排序输出
R 对排序进行反转
f 自定义显示字段
k kill掉指定PID进程
W 保存top环境设置 ~/.toprc
q 退出
# PID:进程id号
# USER:用户
# PR:优先级
# NI:nice值
# VIRT:虚拟内存
# RES:真实内存
# SHR:共享内存
# S:进程状态
# %CPU:占用cpu的百分比
# %MEM:占用内存的百分比
# TIME+:进程运行时间
# COMMAND:进程运行的命令
什么是中断
- 中断是系统用来影响硬件设备请求的一种机制,它会打断进程的正常调度和执行,然后调用内核中的中断处理程序来影响 - 设备的请求。
##什么是软中断呢?
软中断和硬中断都有一个共同的特点,都会中断当前操作,但是呢又有所区别,软中断当在进行一个任务的时候来了一个新的任务,就将先停止当前的任务,然后立马将新的任务放入内存当中,延迟处理新任务,最后此任务交由线程来进行处理。
## 什么是硬中断呢
同样在执行一个进程的时候,又有新的任务请求访问,cpu会立马对当前进程进行处理,但是呢新的进程只能处于等待,等待上进程结束之后,才能对新进程进行处理
kill 信号管理
- kill不仅仅可用作进程的结束,也可以对服务重新加载,将进程暂停等等。。。
[root@qls ~]# kill -l # 查看kill所有参数
1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP
6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1
11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM
16) SIGSTKFLT 17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP
21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ
26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO 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
//常见信号列表:
数字信号 信号别名 作用
1 HUP 挂起信号,往往可以让进程重新配置 # 如nginx配置文件有修改,但不想重启服务,可重新加载
kill -s HUP # 配置文件,使用这两种方法,不会影响到业务
kill -1
2 INT 中断信号,起到结束进程的作用,和ctrl + c 的作用一样
kill -s INT
kill -2
3 QUIT 让进程退出,结果是进程退出
kill -s QUIT
kill -3
9 KILL 直接结束进程,不能被进程捕获
kill -9
kill -s KILL
15 TERM 进程终止,这是默认信号
kill -15
kill -s TERM
kill
18 CONT 被暂停的进程将继续恢复运行
19 STOP 暂停进程
20 TSTP 用户停止请求,作用类似于ctrl + z 把进程放到后台并暂停
## pkill # 批量对nginx进程进行杀死
[root@oldboy yum.repos.d]# netstat -lntup|grep 80
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 20991/nginx: master
[root@oldboy yum.repos.d]# pkill nginx
[root@oldboy yum.repos.d]# netstat -lntup|grep 80
## killall
[root@oldboy yum.repos.d]# killall nginx # 批量对nginx进程进行杀死和pkill一样
[root@oldboy yum.repos.d]# netstat -lntup|grep 80
进程优先级
# nice
nice值越高,优先级越低,默认文件描述符为1024个,如超过1024将会导致无法远程连接服务器,所以不仅需要对ulimit数量进行优化,还需要将nice优先级进行修改,数值越低优先级越高。
-n:指定优先级,并执行命令
[root@qls ~]# nice -n -20 tail -f /var/log/messages
# renice
[root@qls ~]# ps axo nice,command|grep sshd
[root@qls ~]# renice 19 9962 # 指定优先级为19 pid为9962
后台进程管理
&:将进程放在后台执行
Ctrl + z:暂停
bg:(background)后台
fg:调出
# screen
· 作用:后台开启新终端执行命令,不影响前台操作,如需查看后台进程,可直接进入新终端中
[root@qls ~]# yum install -y screen # 首先需要安装此命令
[root@oldboy yum.repos.d]# screen -S 这是新的后台任务 # 开启新终端任务,并设置名称
ctrl+a+d # 退出新终端,回到原终端
[root@oldboy yum.repos.d]# screen -ls # 查看后台终端进程数量,和对应id号
There are screens on:
21082.这是新的后台任务 (Detached)
20905.pingbaidu (Detached)
2 Sockets in /var/run/screen/S-root.
[root@qls ~]# screen -r 21082 # 进入新终端中
[root@qls ~]# screen # 不加-S会随机指定一个名称
[root@oldboy yum.repos.d]# kill -9 21082 # 杀死终端任务
[root@oldboy yum.repos.d]# screen -ls # 任务变成dead死亡状态
There are screens on:
21099.pts-0.oldboy (Detached)
21082.这是新的后台任务 (Dead ???)
20905.pingbaidu (Detached)
Remove dead screens with ‘screen -wipe‘.
3 Sockets in /var/run/screen/S-root.
[root@oldboy yum.repos.d]# screen -wipe # 执行命令将原本死掉后台进程移除
# nohup
[root@qls ~]# nohup sh a.sh & # 将脚本放入后台执行,但脚本输出结果会放入nohup.out中
进程管理