第七章 管理与监控Linux进程


查看系统上运行的进程

使用jobs控制进程

发送信号结束和控制进程

监控资源使用情况和系统负载,调整进程优先级



7.1 进程


什么是进程

了解进程状态

查看进程列表



进程, 一个可执行的程序被执行之后的实例,包括:

分配内存的地址空间

进程的运行身份和权限的安全属性

一个或多个线程

进程状态


进程的运行环境,包括:

局部和全局变量

当前的调度上下文

已分配给进程使用的系统资源,例如文件描述符、网络端口等

pid,ppid


一个进程可以在自己的地址空间内创建一个新的子进程,子进程可以继承父进程的环境变量

每个进程都会有自己的进程id(pid),对应的父进程ID叫ppid.在rhel7里,所有的进程都是由systemd这个父进程派生出来的子进程。

子进程在运行自己的程序代码的时候,父进程往往会进入到睡眠状态。



进程状态: man 7 signal

R  进程运行

S  可中断睡眠状态

D  不可中断睡眠状态

K  可被结束的不可中断睡眠状态

Z  僵尸进程

X  进程已经退出

T  进程被暂停


列出进程:

ps aux

ps lax

ps -ef



7.2  使用jobs控制进程

前台进程 firefox,后台进程 frefox  &

&

jobs  查看后台进程,ps j

ctrl + Z 从前台放到后台并且暂停  , ctrl +c , ctrl + B

bg %id 从停止进入运行,fg


[student@localhost Desktop]$ sleep 1000 &  加一个后台进程

[2] 5192

[student@localhost Desktop]$ jobs   查看所有后台进程

[1]-  Running                 firefox &

[2]+  Running                 sleep 1000 &

[student@localhost Desktop]$ fg %1  将1进程弄到前台,ctrl +c后就关闭了火狐浏览器

=================================================

[student@localhost Desktop]$ fg //%2 将2进程放入后 台

sleep 1000

^Z                          // ctrl + Z 从前台放到后台并且暂停 

[2]+  Stopped                 sleep 1000

[student@localhost Desktop]$ jobs  查看

[2]+  Stopped                 sleep 1000

[3]-  Running                 firefox &

[student@localhost Desktop]$ bg %2   //从停止进入运行 

[2]+ sleep 1000 &

[student@localhost Desktop]$ jobs

[2]-  Running                 sleep 1000 &

[3]+  Running                 fi



7.3 使用信号管理进程


学会使用kill命令发送信号与进程通信

定义守护进程的角色

结束用户会话和进程


常见信号列表:


数字信号信号别名作用

1HUP挂起信号,往往可以让进程重新配置

2INT中断信号,起到结束进程的作用,和ctrl + c 的作用一样

3QUIT让进程退出,结果是进程退出

9KILL直接结束进程,不能被进程捕获

15TERM进程终止,这是默认信号

18CONT被暂停的进程将继续恢复运行

19STOP暂停进程

20TSTP用户停止请求,作用类似于ctrl + z 把进程放到后台并暂停


kill命令发送信号

kill PID

kill -signal PID

kill -l


killall 可以通过模糊匹配,同时给多个进程发送信号

$ killall command_pattern

$ killall -signal command_pattern

# killall -signal -u username command_pattern


pkill  类似killall


$ pkill command_pattern(命令可以模糊匹配)

$ pkill -signal command_pattern

# pkill -G GID command_pattern

# pkill -P PPID command_pattern

# pkill -t terminal_name -U UID command_pattern


w -f  查看系统上的所有用户会话情况, -f 输出用户来自哪里

pgrep -l -u bob  列出bob用户的所有进程,-l输出pid

w -h -u  查看bob用户会话情况

pkill -t tty3  把tty3终端下的所有进程结束,除了bash本身

pkill -9 -t tty3 把tty3终端下的所有进程结束,并且bash也结束(用户被强制退出)



pstree -p bob  列出所有属于bob的进程树,-p输出pid

pkill -P pid  匹配所有父进程pid(ppid)为该pid的所有进程



7.4 监控进程活动


系统负载的计算和意义

进程以及子进程和线程产生的计算指令都会让cpu执行,产生请求的这些进程组成"运行队列",等待cpu执行,这个队列就是系统负载

系统负载是所有cpu的运行队列的总和.


假设当前计算机有4个核心的cpu,当前的负载是 2.92 // 平均下来是2.92个进程被处理

cpu1cpu2cpu3cpu4

2.94/4(个cpu核心) =  73%的cpu资源被使用,剩下27%的cpu计算资源是空想的


假设当前的计算有2个核心的cpu,当前的负载是2.92

2.92/2 = 146%  已经验证超过了cpu的处理能力



top 

常见指令

h查看帮出

1输出每个cpu的使用情况  再按一下就不输出 

s设置刷新时间

b高亮现实处于R状态的进程

M按内存使用百分比排序输出

P按CPU使用百分比排序输出

kkill掉指定PID进程

q退出

h查看帮出




========================================================================================

网上找的内容:


A,Shell支持作用控制,有以下命令: 

1. command& 让进程在后台运行 

2. jobs 查看后台运行的进程 

3. fg %n 让后台运行的进程n到前台来 

4. bg %n 让进程n到后台去;   

PS:"n"为jobs查看到的进程编号.


B. 命令详解


fg、bg、jobs、&、ctrl + z都是跟系统任务有关的,虽然现在基本上不怎么需要用到这些命令,但学会了也是很实用的

一。& 最经常被用到

这个用在一个命令的最后,可以把这个命令放到后台执行

二。ctrl + z

可以将一个正在前台执行的命令放到后台,并且暂停

三。jobs

查看当前有多少在后台运行的命令

四。fg

将后台中的命令调至前台继续运行

如果后台中有多个命令,可以用 fg %jobnumber将选中的命令调出,%jobnumber是通过jobs命令查到的后台正在执行的命令的序号(不是pid)

五。bg

将一个在后台暂停的命令,变成继续执行

如果后台中有多个命令,可以用bg %jobnumber将选中的命令调出,%jobnumber是通过jobs命令查到的后台正在执行的命令的序号(不是pid)


#Linux下使用Shell命令控制任务Jobs执行


下列命令可以用来操纵进程任务:

ps 列出系统中正在运行的进程;

kill 发送信号给一个或多个进程(经常用来杀死一个进程);

jobs 列出当前shell环境中已启动的任务状态,若未指定jobsid,则显示所有活动的任务状态信息;如果报告了一个任务的终止(即任务的状态被标记为Terminated),shell 从当前的shell环境已知的列表中删除任务的进程标识;

bg 将进程搬到后台运行(Background);

fg 将进程搬到前台运行(Foreground); 




7.4 监控进程活动 笔记

uptime 告诉我们开了几个小时,当前时间,有几个用户,平均负载    1  5   15分钟的平均负载



如何查看CPU


[student@localhost Desktop]$ cat  /proc/cpuinfo



[student@localhost Desktop]$ grep "model name" /proc/cpuinfo

model name: Intel(R) Core(TM) i5-5200U CPU @ 2.20GHz

model name: Intel(R) Core(TM) i5-5200U CPU @ 2.20GHz


top


top - 20:16:13 up  3:03,  2 users,  load average: 0.00, 0.02, 0.05

Tasks: 476 total,   3 running, 472 sleeping,   1 stopped,   0 zombie僵尸进程

%Cpu(s):  4.2 us,  1.5 sy,  0.0 ni, 94.2 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st

KiB Mem:   1003456 total,   935516 used,    67940 free,      400 buffers

KiB Swap:        0 total,        0 used,        0 free.   266436 cached Mem  虚拟内存,即交换分区,物理内存不足时会占用


   PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND      按CPU的使用百分比来输出的。

  1028 root      20   0  207060  37700   8252 R   5.9  3.8   0:24.00 Xorg       

  2356 student   20   0 1566812 166876  37648 S   4.0 16.6   3:10.96 gnome-she+ 

  2711 student   20   0  619712  18672  12164 S   3.3  1.9   0:05.22 gnome-ter+ 

  5965 student   20   0  123920   1920   1148 R   0.7  0.2   0:00.33 top       






top 

常见指令

h查看帮出

1输出每个cpu的使用情况  再按一下就不输出 

s设置刷新时间

b高亮现实处于R状态的进程

M按内存使用百分比排序输出

P按CPU使用百分比排序输出

kkill掉指定PID进程

q退出

h查看帮出