书到用时方恨少,事非经过不知难。这篇文章主要讲述#yyds干货盘点#Linux进程相关的知识,希望能为你提供帮助。
一、进程
- 1.进程概述:
- 什么是进程(Process) ?
- 是程序的具体实现,执行程序的具体过程。
- Linux操作系统与进程对比window系统进程,ctrl+alt+delete(看到的进程类似)
- 操作系统的一个重要功能就是为进程提供方便,比如启动进程、为进程分配内存空间、管理进程的相关信息等等。
- 如何产生进程?
- 执行一个程序或命令就可以启动一个进程。
- 进程启动时,操作系统为其分配相对应的系统内唯一的进程ID(PID)。
- Linux启动的第一个进程
- [root@localhost ~]# pidof init
- 1
- 进程演示
- [root@localhost ~]# ps
a
- 【#yyds干货盘点#Linux进程】vim install.log
- 图像界面新开一个Terminal#vim install.log
- 程序被加载为进程示意图:
- [root@localhost ~]# ps -aux | grep bash
管道符
- root
2491
0.0
0.1 108304
1920 pts/0
Ss
05:18
0:00 /bin/bash
- root
2515
0.0
0.1 108304
1916 pts/1
Ss
05:20
0:00 -bash
- root
25541
0.0
0.1 108340
1776 pts/2
Ss+
07:08
0:00 /bin/bash
- root
25871
0.0
0.0 103252
828 pts/1
S+
08:04
0:00 grep bash
- [root@localhost ~]# su tom
- [tom@localhost ~]$ ps aux | grep bash
- root
2491
0.0
0.1 108304
1920 pts/0
Ss
05:18
0:00 /bin/bash
- root
2515
0.0
0.1 108304
1916 pts/1
Ss
05:20
0:00 -bash
- root
25541
0.0
0.1 108340
1776 pts/2
Ss+
07:08
0:00 /bin/bash
- tom
25874
0.0
0.1 108340
1772 pts/1
S
08:04
0:00 -bash
- tom
25895
0.0
0.0 103252
828 pts/1
S+
08:04
0:00 grep bash
- [root@localhost ~]# service httpd start
#使用root身份启动httpd服务
- [root@localhost ~]# ps aux|grep httpd
#查看httpd进程
- root
2785
0.0
0.7 184288
3852 ?
Ss
07:39
0:00 /usr/sbin/httpd
- apache
2788?
S
07:39
0:00 /usr/sbin/httpd
- #以apache用户进行管理,达到安全机制,root身份启动后交给普通用户apache(apache用户无登录权限,防止他人恶意入侵后使用用户做一些操作。)
- 2.如何查看进程
- 进程查看命令
- ps(process status) :将某个时间点的程序运作情况截取下来
- 选项和参数
- a :(all)(和输入终端(terminal) 关联的所有 process,通常与x一起使用,列出完整信息。
- x :后台进程
- u :有效使用者 (effective user) 相关的 process
- 常用组合
- ps -aux 观察系统所有的程序数据 (常用)
- 常用组合
- ps -aux 观察系统所有的程序数据 (常用)!!!
- ps axjf 可以用类似于树状的形式显示
- 参数不用背,可以通过man ps或使用Linux的命令大全查看(推荐)
- 仅查看自己的bash相关的进程的详细信息
- [root@test ~]# ps -l
- F S
UID
PID
PPID
C PRI
NI ADDR SZ WCHAN
TTY
TIME CMD
- 4 S
0
2305
2301
0
80
0 - 27084 wait
pts/0
00:00:00 bash
- 4 R
0
2357
2305
0
80
0 - 27035 -
pts/0
00:00:00 ps
- 观察系统所有程序: ps aux(非常常用)
- [root@test ~]# ps aux | head -4
- USER
PID %CPU %MEM
VSZ
RSS TTY
STAT START
TIME COMMAND
- root
1
0.1
0.1
19360
1540
?
Ss
05:07
0:01 /sbin/init
- root
2
0.0
0.0
0
0
?
S
05:07
0:00 [kthreadd]
- root
3
0.0
0.0
0
0
?
S
05:07
0:00 [migration/0]
- 以下为各选项的含义
- USER:该 process 属于那个使用者
- PID :该 process 的程序标识符(进程ID)
- %CPU:该 process 使用掉的 CPU 资源百分比;
- %MEM:该 process 所占用的物理内存百分比;
- VSZ :该 process 使用掉的虚拟内存量 (Kbytes)
- RSS :该 process 占用的物理的内存量 (Kbytes)
- TTY :该 process 是在哪个终端机上面运作,若与终端机无关则显示 ?, 另外, tty1-tty6 是本机上面的登入者程序,若为 pts/0 等等的,则表示为由网络连接进主机的程序。 (pts表示虚拟终端,例如pts/1
pts/2 等)
- STAT:该进程目前的状态,状态显示与ps -l 的 S 旗标相同 (R/S/D/T/Z)
- START:该 process 被触发启动的时间;
- TIME :该 process 实际使用 CPU 运作的时间。
- COMMAND:该程序的实际命令是什么或理解为该进程是哪一个程序/命令启动的
- LINUX进程状态:
- ?
?D 不可中断 Uninterruptible(usually IO)
-
R 正在运行,或在队列中的进程
-
S 处于休眠状态
-
T 停止或被追踪
-
Z 僵尸进程
-
W 进入内存交换(从内核2.6开始无效)
-
X
死掉的进程
- ?
?l 多进程
- <
高优先级
-
N
低优先级
-
s
包含子进程
-
+
位于后台的进程组
- 僵尸进程(状态:Z )
- 通常造成僵尸进程的原因是该进程应该已经执行完毕,或者是因故障应该要终止, 但该进程的父进程却无法完整、有效的将进程结束掉,而造成进程一直存在内存当中 。
- 如果发现在某个进程的CMD后面还接上< defunct> 时,就代表该进程是僵尸进程。
- 例如:apache 8683 0.0 0.9 83384 9992? Z 14:33 0:00 /usr/sbin/httpd < defunct>
- top:动态观察进程的变化
- ps是截取一个时间点的进程状态,而top则可以持续观察进程运行的状态
- 选项与参数:
- -d :后面可以接秒数,就是整个程序画面更新的秒数。默认3秒;
- -b :以批次的方式执行 top ,还有更多的参数可以使用,通常会搭配数据流 重导向来将批次的结果输出成为档案;
- -n:(Number)与 -b 搭配,意义是需要进行几次 top 的输出结果;
- -p :指定某些个 PID 来进行观察监测而已;
- #top –d 2
- #top –b –n
2
- #top –b –n 5 >
>
a.log
- #cat a.log
(cat仅用于查看,不具备编辑功能,vim是可以编辑内容的,vim是vi编译器的升级版,可以理解为是一个强大的三方插件。)
- 在
top 执行过程当中可以使用的按键指令:
- ? :显示在 top 当中可以输入的按键指令
- P :以CPU的使用资源排序显示
- M :以Memory的使用资源排序显示
- N :以PID来排序
- T :由该Process使用的CPU时间累积 (TIME+) 排序
- k :给予某个PID后kill该进程(内核2.6后失效)
- q :离开top软件的按键 。
- #top –d 1
- 按以上选项测试
- [root@test ~]#top -d 2 #每两秒钟更新一次 top
- top - 05:06:55 up 13 min,
1 user,
load average: 0.00, 0.06, 0.10
- Tasks: 125 total,
1 running, 124 sleeping,
0 stopped,
0 zombie
- Cpu(s):
0.2%us,
0.0%sy,
0.0%ni, 99.5%id,
0.0%wa,
0.0%hi,
0.2%si,
0.0%st
- Mem:
1012352k total,
299596k used,
712756k free,
19276k buffers
- Swap:
2031608k total,
0k used,
2031608k free,
108536k cached
- 第一行显示的信息:目前的时间,开机到目前为止所经过的时间 up13min ,已经登入系统的用户人数 1 user,系统在 1, 5,15 分钟的平均工作负载
- 第二行 显示的是目前进程的总量与个别进程在什么状态(running,sleeping, stopped, zombie)
- 第三行显示CPU的整体负载
- 第四行和第五行表示目前的物理内存与虚拟内存使用情况
-
PID USER
PR
NI
VIRT
RES
SHR
S %CPU %MEM
TIME+
COMMAND
-
2301 root
20
0 15036 1244
956
R
0.5
0.1
0:00.50 top
-
1 root
20
0 19356 1540 1228 S
0.0
0.2
0:01.71 init
-
2 root
20
0
0
0
0
S
0.0
0.0
0:00.01 kthreadd
-
3 root
RT
0
0
0
0
S
0.0
0.0
0:00.04 migration/0
-
4 root
20
0
0
0
0
S
0.0
0.0
0:00.01 ksoftirqd/0
-
5 root
RT
0
0
0
0
S
0.0
0.0
0:00.00 migration/0
-
6 root
RT
0
0
0
0
S
0.0
0.0
0:00.00 watchdog/0
-
7 root
RT
0
0
0
0
S
0.0
0.0
0:00.11 migration/1
- 每个 process使用的资源情况:
- PID :每个process的ID; USER: 该process所属的使用者; PR:Priority 的简写,程序的优先执行顺序,越小越早被执行;
- NI :Nice 的简写,与 Priority(优先级) 有关,也是越小越早被执行;
- %CPU:CPU 的使用率%MEM:内存的使用率;
- TIME+:CPU 使用时间的累加; COMMAND 进程名称
- top默认使用CPU使用率(%CPU)作为排序的重点,如果想 要使用内存使用率排序,则可以按下M, 若要恢复则按下P 即可。
- 将top信息进行3次并输出到文件中
- ?
?[root@test ~]# top -b -n
3 >
/tmp/top.txt 。
- 查看top.txt文件
- [root@test tmp]# cat top.txt
- pstree查看进程树?
?
- 选项与参数:
- -A :各程序树之间的连接以 ASCII 字符来连接;
- -U :各程序树之间的连接以万国码的字符来连接。在某些终端接口下 可能会有乱码;
UTF-8
- -p :并同时列出每个 process 的 PID;
- -u :并同时列出每个 process 的所属账号名称。
- 系统进程树同时显示PID与user(如果用root用户执行的,就不会显示,换句话说,用当前账户执行的程序,在pstree中将不显示当前账户的名称)。
- [root@test ~]# pstree –Aup #(演示)
- 3.进程管理
- kill发送信号(并不只是杀死进程)
- –选项与参数:
- -l :这个是 L 的小写,列出目前 kill 能够使用的信号 (signal) 有哪些? signal :向进程发送的信号,指示对它进行不同操作。用 man 7signal 可知:
- -15:以正常的程序方式终止一个进程!!!
- -9 :立刻强制终止一个进程!!!(!!不能强制结束系统级别的进程)
- -2 :代表由键盘输入 [ctrl]-c 同样的动作;
- -1 :对于sshd这样的守护进程,重新读取一次参数的配置文件 (类似 reload),如果进程为非守护进程,默认为终止进程!!
- [root@test ~]# 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
- 具体含义可以通过man来查看
- [root@test ~]# man kill
- SEE ALSO
bash(1), tcsh(1), kill(2), sigvec(2), signal(7)
- [root@test ~]# man 7 signal
- Signal
Value
Action
Comment
-
------------------------------------------------------------
- SIGHUP
1
Term
Hangup detected on controlling terminal or death of controlling process
- SIGINT
2
Term
Interrupt from keyboard
- SIGKILL
9
Term
Kill signal
- SIGTERM
15
Term
Termination signal
- 查看其中某个进程[root@test ~]# ps aux |grepsshd
- root
1859
0.0
0.1
66604
1180 ?
Ss
04:55
0:00 /usr/sbin/sshd
- root
2345
0.0
0.3 100348
4040 ?
Ss
05:21
0:00 sshd: root@pts/0
- root
2927
0.0
0.0 103256
832 pts/0
S+
07:10
0:00 grep sshd
- 重新加载并启动[root@test ~]# kill -1 1859
- [ root@test ~]# ps aux |grep sshd
- root
2345
0.0
0.3 100348
4040 ?
Ss
05:21
0:00 sshd: root@pts/0
- root
2928
0.0
0.1
66604
1144 ?
Ss
07:14
0:00 /usr/sbin/sshd
- root
2930
0.0
0.0 103252
824 pts/0
S+
07:15
0:00 grep sshd
- 再次查看发现重启后的进程的pid发生了改变。
- killall -signal 命令名:终止以某命令名称启动的全部进程
- 向syslogd这个命令启动的进程发送一个SIGHUP信号
- [root@test ~]# killall -9 syslogd
- 强制终止所有以httpd启动的进程
- [root@test ~]# killall -9 httpd
- 演示可以使用hadoop(以java启动的进程)
- [root@test ~]# jps
#查看hadoop的进程
- [root@test ~]#ps aux|grep java
- [root@test ~]#ps ax|grep datanode
对应的PID
- [root@test ~]#killall -15 java
- [root@test ~]# jps #发现对应的进程已经全部关闭
- 4.系统资源监控
- free :观察内存(memory)使用情况
- uname:查阅系统与核心相关信息
- uptime:观察系统启动时间与工作负载
- netstat :网络监控
- vmstat :侦测系统资源变化, CPU/内存/磁盘输入输出状态
- free :观察内存使用情况
- [root@test ~]# free [-b|-k|-m|-g] [-t]
- 选项与参数:
- 直接输入 free 时,显示的单位是 Kbytes,我们可以使用 b(bytes), m(Mbytes),k(Kbytes), 及 g(Gbytes) 来定义显示单位
- -t :在输出的最终结果时,显示物理内存与 swap 的总量。
- 显示目前系统的内存容量
- [root@test ~]# free
- ?
?total?
?used
free
shared
buffers
cached
- Mem: 1012352
318528
693824
0
23592
113208
- -/+ buffers/cache: 181728
830624
- Swap:
2031608
0
2031608
- free命令显示选项解析
- Mem一行显示的是物理内存的量
- Swap,虚拟内存的量
- total是总量,used是已被使用的量,free则是剩余可用的量
- shared,共享内存
- buffers,将要/(未来)写磁盘的内容
- cached,已写磁盘或者已从磁盘读出的内容。
- uname:查阅系统与核心相关信息
- dgango中admin下添加搜索功能
- 蓝魔平板电脑将推出采纳Windows 8.1设置系统的i10s【图】
- 对Win8系统磁盘进行分区方便用户管理电脑提高系统效率【图文】
- 新用户怎样选择32位与64位Win8系统【图】
- 浅析Windows 8开始屏幕与Win10开始菜单之间的争议
- 运用Win8系统“设备”超级按钮向其他设备发送文件与信息
- 浅析Windows 8系统用户运用Metro应用时的注意事项与小技巧
- Ghost win8.1 64位企业版系统及激活工具下载
- win8.1右键反应慢怎样办 win8.1中文版系统点击鼠标右键反应慢