[TOC]
0x00 进程查看
HUP进程(Process):就是正在运行的程序
- 是指正在支持的一个程序或命令,每个进程都是一个运行的实体,都有自己的地址空间,并有一定进程管理的作用:
- 判断服务器健康状态,查看系统中所有进程,杀死进程.
fuser 命令
描述:用于报告进程使用的文件和网络套接字,还可以用指定的文件或者文件系统显示进程进程号,默认情况下每一个文件名后会跟着一个字母来表示类型,那些本地进程使用file参数指定的本地或远程文件。
命令安装:
[TOC]
HUP进程(Process):就是正在运行的程序
描述:用于报告进程使用的文件和网络套接字,还可以用指定的文件或者文件系统显示进程进程号,默认情况下每一个文件名后会跟着一个字母来表示类型,那些本地进程使用file参数指定的本地或远程文件。
命令安装:
[TOC]
HUP进程(Process):就是正在运行的程序
描述:用于报告进程使用的文件和网络套接字,还可以用指定的文件或者文件系统显示进程进程号,默认情况下每一个文件名后会跟着一个字母来表示类型,那些本地进程使用file参数指定的本地或远程文件。
命令安装:1
2Psmisc软件包包含三个帮助管理/proc目录的程序
yum install psmisc -y #可以安装下列程序: fuser, killall,pstree和pstree.x11(到pstree的链接)
语法参数:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26# USage:
fuser [-fMuvw] [-a|-s] [-4|-6] [-c|-m|-n SPACE] [-k [-i] [-SIGNAL]] NAME...
-4 IPv4
-6 IPv6
-a:显示命令行中指定的所有文件;
-k:杀死访问指定文件的所有进程;
-i:杀死进程前需要用户进行确认;
-l:列出所有已知信号名;
-m:指定一个被加载的文件系统或一个被加载的块设备;
-n:选择不同的名称空间,指定关键字进行搜索,如 文件、UDP、TCP
-u:在每个进程后显示所属的用户名。
-s 不显示处理信息
-u PID显示用户名
-v 运行时,显示相信处理信息
- 清零
-m 挂载文件系统
-signal 发送信号
-V 显示版本显示
#对于阻塞特别设备,此命令列出了使用该设备上任何文件的进程。
c:指示进程的工作目录。
e:指示该文件为进程的可执行文件(即进程由该文件拉起)。
f:指示该文件被进程打开,默认情况下f字符不显示。
F:指示该文件被进程打开进行写入,默认情况下F字符不显示。
r:指示该目录为进程的根目录。
m:指示进程使用该文件进行内存映射,抑或该文件为共享库文件,被进程映射进内存。
实际案例:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21#示例1.显示支持的信号,使用最多的是
fuser -l #HUP 平滑启动
#示例2. 要列出使用/etc/passwd文件的本地进程的进程号与用户登录名称
fuser /etc/passwd
fuser -u /etc/passwd
#实例3.进程操作并获取进程对应的 PID
fuser -a /etc/passwd ##显示与/etc/passwd 目录相关的进程
fuser -k /etc/passwd ##杀死与/etc/passwd 目录相关的进
#示例5.根据通信协议和端口来看pid信息
fuser -nv tcp 80 #指定名称空加端口,显示器进程信息
# 端口/协议: 进程PID 当前连接的PID
# 80/tcp: 1005 28805
fuser -k -n tcp 80 # 会终止该端口号进程
#示例4.任一命令都列出了进程号和用户名,然后终止每个正在使用/dev/hd1 (/home)文件系统的进程。仅有root用户能终止属于另一用户的进程。
#如果您正在试图卸下/dev/hd1文件系统,而一个正在访问/dev/hd1文件系统的进程不允许这样,您可能希望使用此命令
fuser -k -u -c /dev/hd1 或者 fuser -kuc /home #注意使用啊,貌似会关闭终端
fuser -km /www #快速停止占用(根据挂载的目录)
描述:在Linux系统中PS(Process Status的缩写)命令常常用来用来列出系统中当前运行的进程,使用该命令可以确定有哪些进程正在运行和运行的状态、进程是否结束、进程有没有僵死、哪些进程占用了过多的资源等等;,总之大部分信息都是可以通过执行该命令得到的。
Tips: Linux上进程有5种状态:
命令参数:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61-a:显示所有终端机下执行的程序,除了阶段作业领导者之外。
a:显示现行终端机下的所有程序,包括其他用户的程序。
-A:显示所有程序。
-c:显示CLS和PRI栏位。
c:列出程序时,显示每个程序真正的指令名称,而不包含路径,选项或常驻服务的标示。
-C<指令名称>:指定执行指令的名称,并列出该指令的程序的状况。
-d:显示所有程序,但不包括阶段作业领导者的程序。
-e:此选项的效果和指定"A"选项相同。
e:列出程序时,显示每个程序所使用的环境变量。
-f:显示UID,PPIP,C与STIME栏位。
f:用ASCII字符显示树状结构,表达程序间的相互关系。
-g<群组名称>:此选项的效果和指定"-G"选项相同,当亦能使用阶段作业领导者的名称来指定。
g:显示现行终端机下的所有程序,包括群组领导者的程序。
-G<群组识别码>:列出属于该群组的程序的状况,也可使用群组名称来指定。
h:不显示标题列。
-H:显示树状结构,表示程序间的相互关系。
-j或j:采用工作控制的格式显示程序状况。
-l或l:采用详细的格式来显示程序状况。
L:列出栏位的相关信息。
-m或m:显示所有的执行绪。
n:以数字来表示USER和WCHAN栏位。
-N:显示所有的程序,除了执行ps指令终端机下的程序之外。
-p<程序识别码>:指定程序识别码,并列出该程序的状况。
p<程序识别码>:此选项的效果和指定"-p"选项相同,只在列表格式方面稍有差异。
r:只列出现行终端机正在执行中的程序。
-s<阶段作业>:指定阶段作业的程序识别码,并列出隶属该阶段作业的程序的状况。
s:采用程序信号的格式显示程序状况。
S:列出程序时,包括已中断的子程序资料。
-t<终端机编号>:指定终端机编号,并列出属于该终端机的程序的状况。
t<终端机编号>:此选项的效果和指定"-t"选项相同,只在列表格式方面稍有差异。
-T:显示现行终端机下的所有程序。
-u<用户识别码>:此选项的效果和指定"-U"选项相同。
u:以用户为主的格式来显示程序状况。
-U<用户识别码>:列出属于该用户的程序的状况,也可使用用户名称来指定。
U<用户名称>:列出属于该用户的程序的状况。
v:采用虚拟内存的格式显示程序状况。
-V或V:显示版本信息。
-w或w:采用宽阔的格式来显示程序状况
-o: 指定显示进程的信息以列为主
x:显示所有程序,不以终端机来区分。
X:采用旧式的Linux i386登陆格式显示程序状况。
-y:配合选项"-l"使用时,不显示F(flag)栏位,并以RSS栏位取代ADDR栏位 。
-<程序识别码>:此选项的效果和指定"p"选项相同。
--cols<每列字符数>:设置每列的最大字符数。
--columns<每列字符数>:此选项的效果和指定"--cols"选项相同。
--cumulative:此选项的效果和指定"S"选项相同。
--deselect:此选项的效果和指定"-N"选项相同。
--forest:此选项的效果和指定"f"选项相同。
--headers:重复显示标题列。
--lines<显示列数>:设置显示画面的列数。
--no-headers:此选项的效果和指定"h"选项相同,只在列表格式方面稍有差异。
--group<群组名称>:此选项的效果和指定"-G"选项相同。
--Group<群组识别码>:此选项的效果和指定"-G"选项相同。
--pid<程序识别码>:此选项的效果和指定"-p"选项相同。
--rows<显示列数>:此选项的效果和指定"--lines"选项相同。
--sid<阶段作业>:此选项的效果和指定"-s"选项相同。
--tty<终端机编号>:此选项的效果和指定"-t"选项相同。
--user<用户名称>:此选项的效果和指定"-U"选项相同。
--User<用户识别码>:此选项的效果和指定"-U"选项相同。
--version:此选项的效果和指定"-V"选项相同。
--widty<每列字符数>:此选项的效果和指定"-cols"选项相同。
格式头说明:1
2USER PID PPID(父进程) C(进程占用CPU的百分比 ) %CPU(占用的CPU) %MEM(占用的内存) VSZ(占虚拟内存KB) RSS(占物理内存KB) TTY(终端)STAT(进程状态)START(占用实时间) STIME(进程启动的时间) TIME COMMAND
root 7248 0.0 0.0 110104 864 tty1 Ss+ 14:06 0:00 /sbin/agetty --noclear tty1 linux
格式说明:
1 | 串行端口终端(/dev/ttySn) |
1 | D //无法中断的休眠状态(通常 IO 的进程) |
实际案例:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66#示例1.显示每个环节变量,以accii树形显示并且不显示标题
$ps efh #以System V风格显示进程
7231 pts/1 Ss 0:00 -bash USER=root LOGNAME=root HOME=/root PATH=/usr/local/sbin:/usr/local/bin:/usr
7291 pts/1 R+ 0:00 \_ ps efh XDG_SESSION_ID=31 HOSTNAME=localhost.localdomain TERM=xterm SHELL=/bi
7248 tty1 Ss+ 0:00 /sbin/agetty --noclear tty1 linux LANG= PATH=/usr/local/sbin:/usr/local/bin:/usr
$ps aux #最初用在Unix Style中
#显示所有进程,还有状态显示(与ps -A的区别)
ps x | head -n 2
# PID TTY STAT TIME COMMAND
# 1 ? Ss 0:17 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
#示例2.显示执行的命令uid以及PID和父进程 (常用)
ps -ef #UID-PID-Command
ps -ef | grep firefox
# UID PID PPID C STIME TTY TIME CMD
# root 1 0 0 6月11 ? 00:00:01 /usr/lib/systemd/systemd --switched-root --system --deseria
#示例3.采用linux标准命令格式查看进程执行的cmd命令
ps -le
# -l 长格式显示。显示更加详细的信息
# -e 显示所有进程和-A作用一致
# F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
# 4 S 0 1 0 0 80 0 - 31359 ep_pol ? 00:00:01 systemd
ps -p 7193
# PID TTY TIME CMD
# 7193 ? 00:00:00 sshd
#实例4.线程的子线程查看
$ps -p 30520
$ps -P 30520 #列表格式差异
PID TTY TIME CMD
30520 ? 00:00:00 docker-proxy
$ps -Hp 30520
PID PSR TTY STAT TIME COMMAND
30520 3 ? Sl 0:00 /usr/bin/docker-proxy -proto tcp -host-ip 0.0.0.0 -host-port 9002 -container-ip 172.18.0.4 -container-port 3306
#实例5.指定显示进程的某些信息
ps -o %cpu,%mem,user,group,comm,nice,pid,stat
%CPU %MEM USER GROUP COMMAND NI PID STAT
0.0 0.0 root root bash 0 5443 Ss
0.0 0.0 root root ps 0 5492 R+
[root@vm-1575613390 ~]# ps -a -o %cpu,%mem,user,group,comm,
# 实例6.进程条件过滤
# 1.CPU占用最多的前10个进程
ps auxw|head -1;ps auxw|sort -rn -k3|head -10
# 2.内存消耗最多的前10个进程
ps auxw|head -1;ps auxw|sort -rn -k4|head -10
# 3.虚拟内存使用最多的前10个进程
ps auxw|head -1;ps auxw|sort -rn -k5|head -10
# 4.RSS是“驻留集大小”表示使用的物理内存最多的前10个进程
ps auxw|head -1;ps auxw|sort -rn -k6|head -10
# 5.按照进程运行时间进行倒序排序显示
ps auxw|head -1;ps auxw|sort -rn -k2|head -10
# 6.按进程消耗内存多少排序的方法
ps -e -o 'pid,comm,args,pcpu,rsz,vsz,stime,user,uid' | sort -k5nr
ps -e -o 'pid,comm,args,pcpu,rsz,vsz,stime,user,uid' --sort -rsz
# PID COMMAND COMMAND %CPU RSZ VSZ STIME USER UID
# 503 systemd-journal /lib/systemd/systemd-journa 0.0 140656 518176 Feb10 root 0
描述:以树状图的方式展现进程之间的派生关系,显示效果比较直观;
安装方式:1
2
3
4
5#RHEL/CentOS
yum install psmisc
#Debian/Ubuntu
apt install psmisc
基础语法参数:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15# 语法:
pstree(选项)
# 参数:
-a:显示每个程序的完整指令,包含路径,参数或是常驻服务的标示;
-c:不使用精简标示法;
-G:使用VT100终端机的列绘图字符;
-h:列出树状图时,特别标明现在执行的程序;
-H<程序识别码>:此参数的效果和指定"-h"参数类似,但特别标明指定的程序;
-l:采用长列格式显示树状图;
-n:用程序识别码排序。预设是以程序名称来排序;
-p:显示程序识别码;PID
-u:显示用户名称;UID
-U:使用UTF-8列绘图字符;
-V:显示版本信息。
实际案例:1
2
3
4
5#示例1.简单示例
pstree # init 进程 systemd 为系统的 PID 1 号进程,所有的进程都在 systemd 的管理之下。
pstree -u
pstree -p # 显示当前所有进程的进程号和进程id
pstree -a # 显示所有进程的所有详细信息,遇到相同的进程名可以压缩显示。
描述:以名称为依据从运行进程队列中查找进程,并显示查找到的进程id;每一个进程ID以一个十进制数表示,通过一个分割字符串和下一个ID分开,默认的分割字符串是一个新行对于每个属性选项,用户可以在命令行上指定一个以逗号分割的可能值的集合
基础语法参数:1
2
3
4
5
6
7
8
9
10#语法
pgrep [选项] <进程名> # 显示进程的PID
# 参数
-o:仅显示找到的最小(起始)进程号;
-n:仅显示找到的最大(结束)进程号;
-l:显示进程名称;
-P:指定父进程号;
-g:指定进程组;
-t:指定开启进程的终端;
-u:指定进程的有效用户ID。
实际案例:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26#示例1.进程名称:指定要查找的进程名称,同时也支持类似grep指令中的匹配模式.
pgrep sshd
pgrep -f sshd
5460
7220
7222
#示例2.显示进程及其名称
pgrep -l ssh
5460 sshd
7222 sshd
7335 sshd
7337 sshd
#示例3.显示最小最大的进程号
$pgrep -lo sshd
5460 sshd
$pgrep -ln sshd
7222
#示例4.显示指定UID的用户
$pgrep -au root #root用户
5779 /usr/sbin/smbd --foreground --no-process-group
5780 /usr/sbin/smbd --foreground --no-process-group
5781 /usr/sbin/smbd --foreground --no-process-group
描述:能可以根据可执行进程来快速找到进程的PID号1
2
3
4
5
6
7
8#语法
pidof [-s] [-c] [-n] [-x] [-m] [-o omitpid[,omitpid..]] [-o omitpid[,omitpid..]..]
program [program..] # 进程名称:指定要查找的进程名称。
-s:仅返回一个进程号;
-c:仅显示具有相同“root”目录的进程;
-x:显示由脚本开启的进程;
-o:指定不显示的进程ID。
实际案例:1
2
3
4
5
6
7#示例1.显示服务相关的进程
$pidof sshd
7195 7193 5459
#示例2.只显示一个进程号
$pidof -s httpd
47365
描述:此命令可以通过PID找出程序的绝对路径,在查找某个java编写的程序运行情况可通过jps命令查看,然后可以通过显示的pid进行程序定位;
使用说明:1
2
3
4
5#(1)找到mysqld进程pid标识然后找绝对路径
$top -n2 -d2
# 30337 polkitd 20 0 2701192 485928 21608 S 0.3 12.5 75:08.94 mysqld
$pwdx 30337
30337: /var/lib/mysql
注意事项:
/proc/进程id/
下面的进程相关文件进行查看进程信息1 | # 进程执行 |
描述:该命令可在进程间通信设施,调用进程具有读取访问lsipc节目信息。
基础示例:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15# 示例1.查看消息队列/共享内存/信号量
$lsipc
RESOURCE DESCRIPTION LIMIT USED USE%
MSGMNI 消息队列数量 7572 0 0.00%
MSGMAX 消息的最大大小(字节) 8192 - -
MSGMNB 默认最大队列大小(字节) 16384 - -
SHMMNI 共享内存段 4096 2 0.05%
SHMALL 共享内存页 18446744073692774399 178 0.00%
SHMMAX 共享内存段的最大大小(字节) 18446744073692774399 - -
SHMMIN 共享内存段的最小大小(字节) 1 - -
SEMMNI 信号量标识符的数目 128 2 1.56%
SEMMNS 信号量总量 32000 28 0.09%
SEMMSL 每个信号量集的最大信号量。 250 - -
SEMOPM 每个semop的最大操作数 32 - -
SEMVMX 信号量最大值 32767 - -
描述:pmap 工具主要用于报告进程“内存映射”情况,指定需要显示内存映射关系的进程号,可以是多个进程号。
语法参数1
2
3
4
5
6
7
8
9
10
11
12
13
14
15# SYNOPSIS
pmap [options] pid [...]
# OPTIONS
-x, --extended : 显示扩展格式
-d, --device : 显示设备格式
-q, --quiet : 不显示头信息
-A, --range low,high : Limit results to the given range to low and high address range. Notice that the low and high arguments are single string separated with comma.
-X : Show even more details than the -x option. WARNING: format changes according to /proc/PID/smaps
-XX : Show everything the kernel provides
-p, --show-path : Show full path to files in the mapping column
-c, --read-rc : Read the default configuration
-C, --read-rc-from file : Read the configuration from file
-n, --create-rc : Create new default configuration
-N, --create-rc-to file : Create new configuration to file
使用示例:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21# 1.显示进程扩展格式
$ pidof dockerd
# 3220194
$ pmap -x 3220194
# 3220194: /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
# Address Kbytes RSS Dirty Mode Mapping
# 000000c000000000 10240 9244 9240 rw--- [ anon ]
# 000000c000a00000 24576 5736 5732 rw--- [ anon ]
# ....
# 000055ad65318000 24764 0 0 r---- dockerd
# ....
# 00007f14bc007000 16 0 0 r---- libresolv-2.31.so (deleted)
# 00007f14bc00b000 64 0 0 r-x-- libresolv-2.31.so (deleted)
# ....
# 00007ffe84662000 132 4 4 rw--- [ stack ]
# ---------------- ------- ------- -------
# total kB 2196164 39852 25784
# 2.统计dockerd进程占用的物理内存。
$ cat /proc/3220194/smaps | grep '^Rss:' | awk '{sum +=$2} END{print sum}'
39852
描述:用来在Linux杀死执行中的程序或工作进程的命令,
kill可将指定的信息送至程序,预设的信息为SIGTERM(15),可将指定程序终止,若仍无法终止该程序,可使用SIGKILL(9)信息尝试强制删除程序->程序或工作的编号可利用ps指令或job指令查看
1 | #语法 |
实际案例:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35#示例1.显示所有信号名称,只有第9种信号(SIGKILL)才可以无条件终止进程,其他信号进程都有权利忽略
kill -l
#下面是常用的信号:根据PID向进程发送信号,常用来结束进程,默认信号为-9
-l [信号数字]显示、翻译信号代码
-1 , -HUP 挂起,终端断线
-2 , -INT 从键盘中断中断(同 Ctrl + C)
-3 , -QUIT 从键盘退出退出(同 Ctrl + \\)
-4 , -ILL 非法指令
-6 , -ABRT 发送abort 信号退出
-9 , -KILL 强制终止
-11 , -SEGV 内存错误
-13 , -PIPE 破坏管道
-14 , -ALRM
-15 , -TERM 发送Termination 信号 终止
-19 , -STOP 停止进程,但不结束( Ctrl+z )
-18 , -CONT 继续运行已停止的进程(与-stop相反,fg/bg命令)
#示例2.进程终止
#先用ps命令来查看该进程对应的PID,可以看到该进程对应的PID是345,现在使用kill命令来终止该进程.
#345 1 00:00:00 find / -name foxy.jpg
kill 345
kill -l 223 #重启进程
kill -9 2236 #强制结束进程
kill -s 9 2236
#示例3.平滑重启服务,不会跳出当前登录用户
kill -HUP 1523
#示例4.关闭读取配置文件后重启(平滑重启)
kill -SIGHUP $(pidof dockerd)
#示例5.指定停止后台执行的任务
jobs
kill %1 #这里的数字是按照jobs返回的数字
补充说明:
Q:SIGINT、SIGKILL和SIGTERM区别?
让程序友好的退出
,当程序未退出时,可以使用kill -9
强制退出;描述:该命令会结束进程族,如果结束单个进程请用kill
,其检查的是 /proc/ 下面的 pid 目录的 cmdline 文件和 status 文件;
1 | # 语法 |
实际案例:1
2
3
4
5
6
7
8
9
10#示例1.结束所有有关于firefox的进程;
pkill firefox
#实例2.结束多余的用户会话(重要)
$w
pkill -9 -t tty1 #只有超级用户才能剔除用户
pkill -9 -t pts/1 #远程终端
#示例3.使用进程名称直接kill掉
pkill -f name
描述:killall 和 pkill 应用方法差不多也是直接杀死运行中的程序把这ps和grep两个过程合二为一; 它查看的是 /proc/pid/stat 文件内容;如果您想杀掉单个进程请用kill 来杀掉.
语法&参数:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16# 安装
yum install psmisc -y
# 语法
killall [选项] [信号] <进程名>
# 参数
-e:对长名称进行精确匹配;
-l:忽略大小写的不同;
-p:杀死进程所属的进程组;
-i:交互式杀死进程,杀死进程前需要进行确认;
-l:打印所有已知信号列表;
-q:如果没有进程被杀死。则不输出任何信息;
-r:使用正规表达式匹配要杀死的进程名称;
-s:用指定的进程号代替默认信号“SIGTERM”;
-u:杀死指定用户的进程。
实际操作:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17#示例0.查看进程信号
killall -l
HUP # 挂起,终端断线
INT # 从键盘中断中断(同 Ctrl + C)
QUIT # 从键盘退出退出(同 Ctrl + \\)
ILL TRAP ABRT IOT BUS FPE
KILL # 终止信号
USR1 SEGV USR2 PIPE ALRM
TERM # 发送Termination 信号 终止
STKFLT CHLD CONT STOP TSTP TTIN TTOU URG XCPU XFSZ VTALRM PROF WINCH IO PWR SYS
UNUSED
#示例1.删除所有的同名进程显示信号量
killall vi #杀死所有同名进程
#示例2.删除apache2得一个进程组:
killall -g apache2
描述:killall5是SystemV killall命令,它向所有进程发送一个信号,除了内核线程和它自己会话中的进程,所以它不会杀死运行脚本的shell。
killall5也可以作为pidof调用,它只是一个指向killall5程序的(符号)链接。
注意: 不要直接执行该命令,如果执行会向所有进行发送一个关闭信号会直接导致机器宕掉;
基础语法:1
2
3
4
5
6
7
8
9killall5 -signalnumber [-o omitpid[,omitpid..]] [-o omitpid[,omitpid..]..]
# 常用参数
-o 省略具有该进程id的进程
# 返回值
如果程序终止进程,则返回零。
如果没有进程被杀死,它返回2。
如果无法找到任何进程(/proc/丢失)返回1
基础示例:1
2# 示例1.杀死除1122外外的所有进程
killall5 -o 1122
CPU 在同一个时间只能执行一个指令,顺序由进程优先级来排序,数字越小优先级越高1
2
3
4
5
6
7#如ps -le命令中可以看见
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
4 S 0 1 0 0 80 0 - 31359 ep_pol ? 00:00:01 systemd
4 S 0 7339 7337 0 80 0 - 18050 poll_s ? 00:00:00 sftp-server
PRI:Priority #优先权
NI:Nice #精密的
修改NI值的几个注意事项:
1)NI的值范围-20~19
2)普通用户调制NI值范围0~19而且只能调整自己的进程
3)普通用户只能调高NI,而不能降低NI值
4)root用户才能设定NI值为负值,而且可以调整任何用户的进程;计算:PRI(最终值)= PRI(原始值) + NI
5)用户只能修改NI 不能直接修改PRI
描述:用于以指定的进程调度优先级启动其他的程序,nice命令可以给新执行的命令直接赋予NI值,但不能修改已经存在的进程NI值.1
2用法:nice [选项] [命令 [参数] ]
-n:指定进程的优先级(整数)。
实际案例:1
2
3
4
5
6
7
8#1.新建一个进程并设置优先级,将当前目录下的documents目录打包,但不希望tar占用太多CPU:
nice -19 tar zcf pack.tar.gz documents
#方法非常简单,即在原命令前加上nice -19。很多人可能有疑问了,最低优先级不是19么?
#那是因为这个“-19”中的“-”仅表示参数前缀;所以如果希望将当前目录下的documents目录打包,并且赋予tar进程最高的优先级:
nice --19 tar zcf pack.tar.gz documents
#示例2.将httpd启动加入优先级
nice -n -5 service httpd start #加入优先级
描述:修改正在运行的进程的调度优先级,预设是以程序识别码指定程序调整其优先权,您亦可以指定程序群组或用户名称调整优先权等级,并修改所有隶属于该程序群组或用户的程序的优先权
1 | #语法参数 |
实际案例:1
2# 将行程id为987及32的行程与行程拥有者为daemon及root的优先序号码加1:
renice 1 987 -u daemon root -p 32 #注意:每一个进程都有一个唯一的id。
描述:/usr/bin/unshare
是Linux自带的命令实际通过unshare()系统调用实现的,调用的主要作用就是不启动一个新进程就可以起到隔离效果,简单的说就是跳出原先的namespace进行操作,使得原进程就可以进行一些需要改隔离的操作;
unshare() 在 C 语言库中的声明如下:1
2
3#define _GNU_SOURCE
#include <sched.h>
int unshare(int flags);
基础语法:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15用法:
unshare [options] <program> [<argument>...]
选项:
-m, --mount unshare mounts namespace
-u, --uts unshare UTS namespace (hostname etc)
-i, --ipc unshare System V IPC namespace
-n, --net unshare network namespace
-p, --pid unshare pid namespace
-U, --user unshare user namespace
-f, --fork 执行unshare的进程fork一个新的子进程,在子进程里执行unshare传入的参数
--mount-proc[=<dir>] mount proc filesystem first (implies --mount)
-r, --map-root-user 将当前用户映射到根用户(暗指--user)
--propagation <slave|shared|private|unchanged>
modify mount propagation in mount namespace
-s, --setgroups allow|deny control the setgroups syscall in user namespaces
基础示例:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23# 1.隔离mnt的Namespace
unshare --mount /bin/bash
# 2.隔离ipc的Namespace
unshare --ipc /bin/bash
# 3.把当前进程的 user namespace 设置成了 root
unshare -u sh -c whoami
root
# 4.该命令unshares一个或多个名称空间,并执行该命令在其命令行参数提供,实现取消共享
$ readlink /proc/$$/ns/mnt
mnt:[4026531840]
$ sudo ./unshare -m /bin/bash
$ readlink /proc/$$/ns/mnt
mnt:[4026532325]
# 5.进程fork一个新的子进程有新的pid,因为子进程已经隔离了pid namespace所以子进程的ps 无法看到父进程里能看到的那些进程列表。
sudo unshare --fork --pid --mount-proc bash
ps -ejf
UID PID PPID PGID SID C STIME TTY TIME CMD
root 1 0 1 0 0 11:39 pts/0 00:00:00 bash
root 27 1 27 0 0 11:39 pts/0 00:00:00 ps -ejf
你好看友,欢迎关注博主微信公众号哟! ❤
这将是我持续更新文章的动力源泉,谢谢支持!(๑′ᴗ‵๑)
温馨提示: 未解锁的用户不能粘贴复制文章内容哟!
方式1.请访问本博主的B站【WeiyiGeek】首页关注UP主,
将自动随机获取解锁验证码。
Method 2.Please visit 【My Twitter】. There is an article verification code in the homepage.
方式3.扫一扫下方二维码,关注本站官方公众号
回复:验证码
将获取解锁(有效期7天)本站所有技术文章哟!
@WeiyiGeek - 为了能到远方,脚下的每一步都不能少
欢迎各位志同道合的朋友一起学习交流,如文章有误请在下方留下您宝贵的经验知识,个人邮箱地址【master#weiyigeek.top】
或者个人公众号【WeiyiGeek】
联系我。
更多文章来源于【WeiyiGeek Blog - 为了能到远方,脚下的每一步都不能少】, 个人首页地址( https://weiyigeek.top )
专栏书写不易,如果您觉得这个专栏还不错的,请给这篇专栏 【点个赞、投个币、收个藏、关个注、转个发、赞个助】,这将对我的肯定,我将持续整理发布更多优质原创文章!。
最后更新时间:
文章原始路径:_posts/系统运维/Linux/常用命令/系统管理类命令/系统进程管理查看.md
转载注明出处,原文地址:https://blog.weiyigeek.top/2019/6-13-168.html
本站文章内容遵循 知识共享 署名 - 非商业性 - 相同方式共享 4.0 国际协议