#yyds干货盘点#Linux进程
Posted 学思共进
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了#yyds干货盘点#Linux进程相关的知识,希望对你有一定的参考价值。
一、进程
1.进程概述:
- 什么是进程(Process) ?
是程序的具体实现,执行程序的具体过程。
- Linux操作系统与进程对比window系统进程,ctrl+alt+delete(看到的进程类似)
操作系统的一个重要功能就是为进程提供方便,比如启动进程、为进程分配内存空间、管理进程的相关信息等等。
- 如何产生进程?
执行一个程序或命令就可以启动一个进程。
进程启动时,操作系统为其分配相对应的系统内唯一的进程ID(PID)。
- Linux启动的第一个进程
[root@localhost ~]# pidof init
1
- 进程演示
[root@localhost ~]# ps a
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
- 第一行显示的信息:目前的时间,开机到目前为止所经过的时间 up 13min ,已经登入系统的用户人数 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 7 signal 可知:
- -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 |grep sshd
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:查阅系统与核心相关信息
- 以上是关于#yyds干货盘点#Linux进程的主要内容,如果未能解决你的问题,请参考以下文章