Linux-进程管理命令

进程管理命令-ps(静态)

ps	#查看进程的信息,静态的显示  


选项:
	a		#显示所有的进程  	
	u		#显示正确的用户或者ID信息	
	x		#显示所有没有终端的进程  	
	-e		#显示所有的进程 	
	-f		#显示更多的信息 
[root@wqh ~]# ps  aux
USER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root          1  0.0  0.4 128144  4844 ?        Ss    2019   1:27 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
root          2  0.0  0.0      0     0 ?        S     2019   0:00 [kthreadd]
root          3  0.0  0.0      0     0 ?        S     2019   0:10 [ksoftirqd/0]
root          5  0.0  0.0      0     0 ?        S<    2019   0:00 [kworker/0:0H]
root          7  0.0  0.0      0     0 ?        S     2019   0:00 [migration/0]
root          8  0.0  0.0      0     0 ?        S     2019   0:00 [rcu_bh]
root          9  0.0  0.0      0     0 ?        R     2019   1:06 [rcu_sched]
root         10  0.0  0.0      0     0 ?        S<    2019   0:00 [lru-add-drain]
root         11  0.0  0.0      0     0 ?        S     2019   0:10 [watchdog/0]
root         13  0.0  0.0      0     0 ?        S     2019   0:00 [kdevtmpfs]
root         14  0.0  0.0      0     0 ?        S<    2019   0:00 [netns]
root         15  0.0  0.0      0     0 ?        S     2019   0:00 [khungtaskd]

#每列的含义

USER  		#进程运行的用户     
PID		#进程的ID号
%CPU 		#进程占用CPU的使用百分比
%MEM    	#进程占用内存的使用百分比 
VSZ   		#虚拟内存集   进程占用虚拟内存的使用空间
RSS 		#物理内存集	进程占用物理内存的使用空间
TTY      	#终端  
	?	#没有终端,内核运行的一些程序  
	tty1	#本地机器终端
	pts/0	#远程的虚拟终端  0   第一个虚拟终端
	pts/1	#第二个虚拟终端  
STAT 	#进程运行的状态 
	S	#正在休眠状态
	s	#父进程,说明下面有子进程 
	R	#正在运行的状态
	D	#无法被终止的休眠状态  
	T	#被暂停或者被追踪的状态  
	Z	#僵尸进程 
	l	#字母L,以线程方式运行
	<	#优先级别高的进程
	N	#优先级低的进程
	+	#前台运行
START   	#启动的时间,分钟
TIME 		#进程使用CPU的时间
COMMAND		#执行的指令
       有[]    	#内核态,系统运行的程序
       无[]	#用户态,用户运行的程序 

## 联合 grep命令 查看进程数的小技巧
# 第一个窗口执行
[root@wqh ~]# tar  czf  etc.tar.gz   /etc/  /var/  
tar: Removing leading `/' from member names

# 第二个窗口检查(高级用法)
[root@wqh ~]# ps  aux  |  grep  [t]ar
root      39125  5.2  0.3 125576  3268 pts/0    D+   10:44   0:06 tar czf etc.tar.gz /etc/ /var/

# 第二个窗口检查(低级用法)
# 此时不会显示出默认输出的grep进程,利用了 ps命令 不识别 `[]` 符号,而 grep命令 识别,会将 `[]` 视为无物
[root@wqh ~]# ps  aux  |  grep  tar
root      39125  5.2  0.3 125576  3268 pts/0    D+   10:44   0:06 tar czf etc.tar.gz /etc/ /var/
root      15344  0.0  0.0 112712   960 pts/1    R+   20:43   0:00 grep --color=auto tar

进程管理命令-top(动态)

# 第一行
top - 11:30:21 up 5 days, 23:38,  3 users,  load average: 0.00, 0.01, 0.05
11:30:21 		   #当前系统的时间
up 5 days, 23:38,  	#系统运行时间,从你开机到现在总共运行了多长时间
3 users,  			#shell窗口的数量,登录的用户数量  
load average: 0.00, 0.01, 0.05		#系统的平均负载    1分钟   5分钟   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
%Cpu(s):        #占用CPU的使用时间百分比 
0.3 us,  	#用户态,用户进程所占用cpu的百分比(user)
0.0 sy,  	#内核态,系统进程所占用cpu的百分比(system)
0.0 ni, 	#用做nice加权的进程占用cpu的百分比(nice),nice 值越高,级别越高,越不容易放弃 CPU
99.7 id,  	#空闲的进程占用cpu的百分比(idle)
0.0 wa,  	#等待I/O完成的进程占用cpu的百分比(waiting I/O)
0.0 hi,  	#hardIRQS  处理硬中断占用cpu的百分比(hard Interrupt ReQuest)
0.0 si,  	#softIRQS	处理软中断占用cpu的百分比(soft Interrupt Request)
0.0 st		#虚拟化进程所窃取主机的占用cpu的百分比(steal)
us: is meaning of "user CPU time"
sy: is meaning of "system CPU time"
ni: is meaning of" nice CPU time"
id: is meaning of "idle"
wa: is meaning of "iowait" 
hi:is meaning of "hardware irq"
si : is meaning of "software irq"
st : is meaning of "steal time" 

# 第四行、第五行
KiB Mem :  2028088 total,   109644 free,   138596 used,  1779848 buff/cache
  物理内存     总用量          剩余用量         已用            缓冲和缓存
KiB Swap:  2097148 total,  2096884 free,      264 used.  1647436 avail Mem 
  虚拟内存     总用量          剩余用量         已用            可用量      

# 第六行(即关于进程字段名)
PID:进程id号 
USER:用户
PR:优先级(priority)
NI:nice值(越nice,值越大,优先级就低)
VIRT:虚拟内存
RES:物理内存
SHR:共享内存
S:进程状态
%CPU:占用cpu的百分比
%MEM:占用内存的百分比
TIME+:进程运行时间
COMMAND:进程运行的命令


# top外置命令选项
    -d:指定变化时间
    -p:只查看指定PID的进程
    -u:只查看指定用户的进程
    -b:保存到文件,和 -n 配合使用, -n代表次数
    -n:指定次数

# top 常见内部指令
h   查看帮出
z   高亮显示
1   显示所有CPU的负载
s   设置刷新时间
b   高亮显示处于R状态的进程
M   按内存使用百分比排序输出
P   按CPU使用百分比排序输出
R   对排序进行反转
f   自定义显示字段
k   kill掉指定PID进程
W   保存top环境设置 ~/.toprc(做完 f 自定义操作,可以保存)
q   退出

什么是中断

硬中断   和   软中断  

硬中断  	处理跟硬件的请求,特点,速度够快 

软中断     内核进行处理中断请求,硬中断处理时间过长的请求,放入内存中,更新一下硬件寄存器,内存进行调取这个请求进行处理,以线程的方式运行

[root@wqh ~]#  ll  /proc/softirqs		#关于软中断的操作文件

发送网络包的时候,影响性能 

管理进程状态

终止进程的命令有killkillallpkill,他们是linux中杀手三人组。

kill命令

## 1. kill

# 基本用法
kill		# 根据信号执行的相应操作(默认为-15)
                # 默认情况(-15),会根据进程id去终止进程,如果进程不存在,会提示
[root@wqh ~]# ps  aux |grep  top
root       1910  0.0  0.2 162008  2216 pts/1    S+   10:03   0:00 top
[root@wqh ~]# kill  1910
[root@wqh ~]# ps  aux |grep  top


# 查看所有kill信号 
[root@wqh ~]# kill  -l
 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) SIGHUP				#重新加载配置文件,平滑重启(hang up)
 2) SIGINT				#跟ctrl+c一样,终止进程
 9) SIGKILL				#强制终止进程
 15) SIGTERM			        #终止进程,默认的信号  (terminated)
 20) SIGTSTP			        #跟ctrl+z一样,将前台进程暂停到后台
 
# 终止进程
[root@wqh06 ~]#  kill 96421
[root@wqh06 ~]#  kill -15 96421

 
# 平滑重启,进程的ID不会改变,会重新加载配置文件,(如图所示)
[root@wqh ~]# kill  -1  2570
 
# 取消当前进程的操作
[root@wqh ~]# kill  -2  2726
 
# 强制终止进程(杀进程一个措手不及)
[root@wqh ~]# kill  -9  3091
 
 
# 将前台进程暂停到后台
[root@wqh ~]# kill  -20  3091

Kill -1的用法示例

killall命令

## 2. killall		#根据进程的名称取终止进程,如果进程不存在,会提示,精确匹配 (pidof top | xargs kill)

[root@wqh ~]# killall  top
[root@wqh ~]# ps  aux |grep top
[root@wqh ~]# killall  top
top: no process found

pkill命令

## 3. pkill		#根据进程名称终止进程,进程如果不存在,不会提示,模糊匹配 (pgrep top | xargs kill)
			#只要进程名称中包含终止进程服务的名称,就会终止掉,特别是sh这样的进程


# 若使用pkill命令删除,则会删除命令中包含sh的所有进程
[root@wqh ~]# killall  sh
# 会杀掉以下进程:
[root@wqh06 ~]# ps -ef |grep sh
root       6619      1  0 Apr20 ?        00:00:00 /usr/sbin/sshd -D
root      71376   6629  0 10:07 tty1     00:00:00 -bash
root     103953 103952  0 20:49 pts/2    00:00:00 /bin/bash
root     108153   6619  0 22:16 ?        00:00:00 sshd: root@pts/0
root     108156 108153  0 22:16 pts/0    00:00:00 -bash
root     109177 108156  0 22:36 pts/0    00:00:00 grep --color=auto sh

pidof 和 pgrep 补充

## 4. pidof 和 pgrep

# 首先我们有 PID 为 101666 的这样一个进程
[root@wqh06 ~]# ps -ef |grep nginx
nginx    101666      1  0 20:07 ?        00:00:00 nginx: worker process
root     101794  99575  0 20:09 pts/1    00:00:00 grep --color=auto nginx

pidof 	# 精准搜索
[root@wqh06 ~]# pidof ngi            //无结果
pgrep	# 模糊搜索(和grep相似)
[root@wqh06 ~]# pgrep ngi            //有结果
101666

## 批量杀进程
# pidof nginx | xargs kill
# pgrep nginx | xargs kill

关于优先级PR和NI

关于top中的PR和NI

简而言之,PR就是优先级NI的一个映射,系统中有针对NI优先级进行操作的命令,如下。

# nice (定义范围为[-20,19],小于-20则取-20,大于19则取19)
-n:指定优先级
[root@wqh06 ~]# nice -n -50 vi test

# renice
root@wqh06 ~]# ps axo pid,ni,command |grep vi
  6332   0 /usr/bin/VGAuthService -s
102547 -20 vi test
102687 -20 grep --color=auto vi
[root@wqh06 ~]# renice 19 102547 
102547 (process ID) old priority -20, new priority 19

后台进程管理

### 一. 局限于一个终端的进程调度
&		        # 将进程放在后台执行
bg    %ID		# 让一个暂停的后台进程在后台进行运行
fg    %ID		# 让一个后台的进程放入到前台运行
jobs		        # 显示当前终端后台的用户执行的进程
Ctrl + z                # 暂停当前进程,放入后台
 
### 二. 不局限于一个终端的进程调度
##  1. nohup(no hang up)放到后台,关掉终端,进程依然会运行,不受制于终端窗口,同时,将默认输出到公屏上的内容重定向到nohup.out中
[root@wqh06 ~]# nohup tar zcf var.tgz /var 


##  2. screen 相当于开启一个新的shell,在shell中运行,放到后台运行

# 2.1 创建后台进程并命名 或者 不指定名称直接进入
[root@wqh06 ~]# screen -S bgprocess			// 指定名称
[root@wqh06 ~]# screen      	 		       // 不指定名称

# 2.2 Ctrl + a + d 临时退出,将shell放到后台运行

# 2.3 查看screen的子shell窗口列表
[root@wqh06 ~]# screen  -list
There are screens on:
	103952.bgprocess	(Detached)			// 指定名称的screen
	103925.pts-0.wqh06	(Detached)			 // 不指定名称的screen
2 Sockets in /var/run/screen/S-root.

# 2.4 根据 pid 或 名称 进入子shell
[root@wqh06 ~]# screen -r 103952	 // 通过pid调取
[root@wqh06 ~]# screen -r bgprocess  // 或者通过名字调取

# 2.5 彻底关闭(删除)screen,需要先调出,然后在这个shell中exit,或者Ctrl + d
[root@wqh06 ~]# screen -r  pts-0.wqh06
[screen is terminating]		     // 进入子shell后,我进行了Ctrl + d的操作
[root@wqh06 ~]# screen  -list
There is a screen on:
	103952.bgprocess	(Detached)
1 Socket in /var/run/screen/S-root.

# 2.6 当有一个终端用 -r 选项连接screen的子shell窗口时,其他终端用 -r 无法连接,需要用 -x
# 使用 -x 选项,会使两个终端的 screen 同步,如下举例,使用pts/0 进行操作, pts/1 的终端也会同步显示,可以用来做教学演示

[root@wqh06 ~]# screen -r bgprocess     --------终端pts/0 进入screen bgprocess 成功
[root@wqh06 ~]# screen -list            --------终端pts/1 查看screen list
There is a screen on:
	103952.bgprocess	(Attached)
1 Socket in /var/run/screen/S-root.
[root@wqh06 ~]# screen -r bgprocess     --------终端pts/1 进入screen bgprocess 报错
There is a screen on:
	103952.bgprocess	(Attached)
There is no screen to be resumed matching bgprocess.
[root@wqh06 ~]# screen -x bgprocess     --------终端pts/1 进入screen bgprocess 成功
# 当多台机器使用 screen -x 连接同一个`示范`窗口时,想单独退出,依然是用 Ctrl + a + d ,如果 Ctrl + d 就会关闭当前screen,所有其他终端都会断开这个子Shell的连接
### 三. 详细区分用法举例

# 关掉终端,进程就会终止的命令
[root@wqh06 ~]# tar zcf etc.tgz  /etc/ /var/ 

# 放到后台,关掉终端,进程依然会终止的命令
[root@wqh06 ~]# tar zcf etc.tgz  /etc/ /var/ &

# 放到后台,关掉终端,进程依然会运行,不受制于终端窗口,同时,将默认输出到公屏上的内容重定向到nohup.out中
[root@wqh06 ~]# nohup tar zcf etc.tgz /etc/ /var/
nohup: ignoring input and appending output to ‘nohup.out’

# 放到后台,关掉终端,进程依然会运行
[root@wqh06 ~]# screen -S bgprocess
[root@wqh06 ~]# ping baidu.com
Ctrl + a + d 暂时退出即可。
原文地址:https://www.cnblogs.com/zzzwqh/p/12746322.html