RHCE第四周 进程管理

1:进程的概念

2:linux监控

3:信号管理

4:进程优先级

5:job任务

 

进程:就是正在运行的程序叫做进程

进程的权限来源于用户的权限,继承用户的权限;哪个用户运行,那么进程就继承哪个用户的uid和gid

 

查看进程的2种方式

一:ps(静态的查看进程)

就是在一瞬间的时候,查看进程

1:ps 的选项

-a 显示所有终端下的进程
-x 显示所有进程(不以终端来区分)内核程序
-u 显示用户的进程
-e 显示所有的进程
-f 显示父进程
-o 自定义的显示
-p 指定查看的pid

2:ps命令详细介绍

1:输出的名词的解释

[root@server /]# ps -aux | head 
USER         PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root           1  0.0  0.4 171796 15940 ?        Ss   05:51   0:01 /usr/lib/systemd/systemd rhgb --switched-root --system --deserialize 31
root           2  0.0  0.0      0     0 ?        S    05:51   0:00 [kthreadd]
root           3  0.0  0.0      0     0 ?        I<   05:51   0:00 [rcu_gp]
root           4  0.0  0.0      0     0 ?        I<   05:51   0:00 [rcu_par_gp]

 

user:就是这些进程是由哪些用户创建的

pid:就是每个进程都会被系统分配一个pid,进程结束后,pid就会被释放出来,给下一个进程使用

%cpu:就是进程占用了多少cpu

%mem:就是进程占用了多少的内存

tty:就是得到终端的方式,有三种,tty;pts;?

stat:就是进程的状态, 四种,正在运行的,停止的,睡眠的,僵尸的

time:就是这个进程持续的时间

command:就是这个进程的命令

2:tty的解释

有三种获得终端的方法

tty和pts都是linux的终端设备

tty:与计算机连接,有串口这些东西,与计算机的输入和输出有关系的设备,键盘或者显示器,tty2表示该进程正在tty2上运行,它是一个物理控制台,用于与用户进程交互的,每一个物理控制台都有一个关联的tty设备,在命令行模式下,直接与控制台进行交互,就是与电脑直连的,ctrl+alt+Fn就是的,有tty3和tty4

pts:就是伪终端,图形化和远程连接这种方式的,pts/0就是第一个终端,2就是第二个终端

?:表示没有终端,是内核的进程

3:stat的解释

这个是进程的状态,

孤儿进程:就是子进程在运行,但是父进程退出了,这个时候,守护进程就会接管,来关闭这个孤儿进程

僵尸进程:这个就是父进程对于子进程的发的消息没有回应,此时,子进程就会一直占用cpu的资源

 

3:PS列子

1)一般与grep配合使用查找pid

[root@server /]# vim a &
[1] 9941
[root@server /]# jobs 
[1]+  已停止               vim a
[root@server /]# ps -aux | grep vim
root        9941  0.0  0.2 229528  9200 pts/0    T    10:43   0:00 vim a
root        9952  0.0  0.0 221684  2288 pts/0    S+   10:44   0:00 grep --color=auto vim
[root@server /]#

2)ps -ef === ps -aux

[root@server /]# ps -aux | wc -l
305
[root@server /]# ps -ef | wc -l
305
[root@server /]# 

3)-o这个选项,自定义显示内容

只显示user,%mem,%cpu,command

[root@server /]# ps -axo user,%cpu,%mem,command |head -5
USER     %CPU %MEM COMMAND
root      0.0  0.4 /usr/lib/systemd/systemd rhgb --switched-root --system --deserialize 31
root      0.0  0.0 [kthreadd]
root      0.0  0.0 [rcu_gp]
root      0.0  0.0 [rcu_par_gp]
[root@server /]# 

4)按照内存和cpu来排序  --sort

不带上减号,默认是升序,反之,就是降序

[root@server /]# ps -aux --sort=%cpu | tail -5
root       10166  0.0  0.1 233896  6812 pts/1    R+   10:53   0:00 ps -aux --sort=%cpu
root       10167  0.0  0.0 221308  1044 pts/1    S+   10:53   0:00 tail -5
root        8240  0.1  0.2 240316 10088 ?        Ss   09:18   0:06 /usr/libexec/sssd/sssd_kcm --uid 0 --gid 0 --logger=files
root        8432  0.3  2.6 1027100 103964 ?      Ssl  09:31   0:15 /usr/libexec/gnome-terminal-server
root        1603  2.0 12.4 4227512 496640 ?      Ssl  05:52   6:06 /usr/bin/gnome-shell
[root@server /]# 


#带上减号的
[root@server /]# ps -aux --sort=-%cpu | head -5
USER         PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root        1603  2.0 12.4 4227512 496588 ?      Ssl  05:52   6:06 /usr/bin/gnome-shell
root        8432  0.3  2.6 1027100 103964 ?      Ssl  09:31   0:15 /usr/libexec/gnome-terminal-server
root        8240  0.1  0.2 240316 10088 ?        Ss   09:18   0:06 /usr/libexec/sssd/sssd_kcm --uid 0 --gid 0 --logger=files
root           1  0.0  0.4 173148 17368 ?        Ss   05:51   0:02 /usr/lib/systemd/systemd rhgb --switched-root --system --deserialize 31
[root@server /]# 

5)显示父进程

[root@server /]# ps -ef| head -5
UID          PID    PPID  C STIME TTY          TIME CMD
root           1       0  0 05:51 ?        00:00:02 /usr/lib/systemd/systemd rhgb --switched-root --system --deserialize 31
root           2       0  0 05:51 ?        00:00:00 [kthreadd]
root           3       2  0 05:51 ?        00:00:00 [rcu_gp]
root           4       2  0 05:51 ?        00:00:00 [rcu_par_gp]
[root@server /]# 

  

二:top命令(动态的查看进程)

1:top命令选项

-d 就是实时刷新的速度
-p 指定监控进程pid
-st cpu等待时间的百分比

 

 

2:top命令详细介绍

1)top命令输出结果介绍

top - 14:50:56 up 15 min,  2 users,  load average: 0.10, 0.08, 0.05
Tasks: 289 total,   1 running, 288 sleeping,   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
MiB Mem :   3888.9 total,   2318.1 free,   1017.1 used,    553.6 buff/cache
MiB Swap:   4096.0 total,   4096.0 free,      0.0 used.   2629.0 avail Mem 

    PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND                                          
      1 root      20   0  171756  16048  10492 S   0.0   0.4   0:01.32 systemd                                          
      2 root      20   0       0      0      0 S   0.0   0.0   0:00.02 kthreadd                                         
      3 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 rcu_gp    

 

每个字段的介绍

top:开机时间,多少个用户在登录这个系统,当前系统负载均衡值,每分钟,每5分钟,每15分钟,一般超过了1就超载运行,等于1全力在运行,小于1,很空闲

tasks:289个进程  有一个正在运行;288个在休眠中,0个停止,0个僵尸

%cpu:占用的cpu率。us---为用户占用    sy----系统内核占用   ni----改变过系统优先级占用   id----为空闲的,一般这个数字越大,就是没有占用多少cpu, wa:就是等待i|o操作完成占用的cpu

mem:这个是总内存,还有多少空余的内存,已经使用了多少内存,缓存量

swap:这个交换分区的大小,多少空闲,多少已经被使用了,可用的物理内存剩余多少

 

2)关于缓存的介绍

就是电脑要读取一个图片的话,一般不会从磁盘中读取,都是直接在缓存中读取的,因为磁盘的读取速度太慢了,所以有的就存放在缓存中,缓存就是提高了cpu的速度

写入磁盘的话,就是cpu现将数据写到缓冲区中,然后在写入到硬盘中去,如果一味的等待着写入磁盘的话,cpu的利用率就很低,所以一般写入在缓冲区中

 

3:top命令在执行的过程中使用的交互命令

按 "1"可以监控每个cpu的状态

c:就是显示完整的命令

M:就是按内存占用情况进行排序(降序)

P:就是按照cpu的占用情况进行排序(降序)

T:按照时间来进行排序

f:可以自定义显示哪些内容(按空格就是取消哪些不需要展示的内容)

k:可以杀死进程,要选中进程,然后回车,就能删除进程(发送15的信号)

 

三:pgrep查看进程

1:pgrep详细介绍

pgrep就是通过程序的名字来查询进程的工具,输出的是进程的pid

选项:

-U 就是查找用户的进程id
-G 查找某个组的进程id
-P 根据父进程id,查找出所有的子进程id
-l 不仅打印pid,也打印进程名
-o 表示如果有多个进程同时在运行的话,找最开始启动的
-n 找最后启动的进程
-d 定义多个进程之间用分隔符,如果没有,默认换行符
-c 统计匹配到进程的数量

 

2:pgrep案例

1)显示以httpd进程的pid以;作为分割

[root@server /]# pgrep -d: httpd
2632:2633:2634:2635:2636
[root@server /]# 

2):查找出最开始打开文件的pid和最后打开文件的pid

[root@server /]# vim a &
[1] 2916
[root@server /]# vim b &
[2] 2917

[1]+  已停止               vim a
[root@server /]# 

#最开始编辑的的文件
[root@server /]# pgrep -o vim -l
2916 vim

#最后开始编辑的文件
[root@server /]# pgrep -n vim -l
2917 vim

3):查找用户的进程pid

[root@server /]# pgrep -U root|head -10
1
2
3
4
6
9

 

4)统计httpd进程的数量

[root@server /]# pgrep -c httpd
5

 

四:pidof查看进程(精确的查询)

它是根据进程名来查询pid的

[root@server /]# pidof httpd
2636 2635 2634 2633 2632 

能够迅速的查找到进程的pid

应用:

查看httpd进程的详细信息

[root@server /]# ps -p $(pidof httpd)
    PID TTY      STAT   TIME COMMAND
   2632 ?        Ss     0:00 /usr/sbin/httpd -DFOREGROUND
   2633 ?        S      0:00 /usr/sbin/httpd -DFOREGROUND
   2634 ?        Sl     0:00 /usr/sbin/httpd -DFOREGROUND
   2635 ?        Sl     0:00 /usr/sbin/httpd -DFOREGROUND
   2636 ?        Sl     0:00 /usr/sbin/httpd -DFOREGROUND
[root@server /]# 

 

 

五:进程之间的通信

进程之间的通信靠的是管道和信号,消息队列,socket套接字等

1:kill命令

它是一个发送信号的工具

选项:

-l 列出信号
-15 关闭进程
-9 强制关闭
-1 重新加载配置文件

案例:

#强制的杀死
[root@server /]# pgrep vim
2976
[root@server /]# kill -9 2976
[root@server /]# pgrep vim
[root@server /]# 

#正常的关闭
[root@server /]# pgrep vim
2985
[root@server /]# kill -15 2985
[root@server /]# pgrep vim
[root@server /]# 

 

2:killall命令(通过名称(进程的名字)来杀死)

killall命令删除通过名称来删除

[root@server /]# pgrep vim
3001
[root@server /]# killall -9 vim
[root@server /]# pgrep vim
[root@server /]# 

 

杀死httpd进程(所有的)

杀死这一类的所有进程

[root@server /]# pgrep -d: httpd
3021:3022:3023:3024:3025
[root@server /]# killall -9 httpd
[root@server /]# pgrep -d: httpd
[root@server /]# 

 

3:pkill命令

也是杀死进程的命令,根据模式来发送信号

选项:

-signal 通过信号来杀死进程
-u user command 结束这个用户这个命令的所有进程
-9 强制结束进程
-t

结束这个终端的所有进程(这个终端是怎么获得的)

-9 -t 就是将一个用户退出终端
-e 精确匹配进程的名字(完整匹配)

 

案列:

#结束一个终端的进程
[root@server ~]# pkill  -t tty2

#强制删除vim进程
[root@server /]# pgrep vim
6425
[root@server /]# pkill -9 vim
[root@server /]# pgrep vim

#结束一个用户的所有进程
[root@server /]# pgrep -u q7   #前面是q7的终端的pid,后面的才是vim的pid
6447
6480
[root@server /]# pgrep vim
6480
[root@server /]# ps -aux|grep 6447
q7          6447  0.0  0.1 224220  5844 pts/3    S    16:19   0:00 -bash
root        6489  0.0  0.0 221684  2380 pts/0    S+   16:20   0:00 grep --color=auto 6447
[root@server /]# pkill -u q7
[root@server /]# pgrep vim
[root@server /]# 

#强制的退出一个用户
[root@server /]# ps -a
    PID TTY          TIME CMD
   5515 tty2     00:00:00 gnome-session-b
   6526 pts/3    00:00:00 ps
[root@server /]# 
[root@server /]# pkill -9 -t pts/3
Connection closing...Socket close.

Connection closed by foreign host.

Disconnected from remote host(192.168.20.10:22) at 21:23:02.

Type `help' to learn how to use Xshell prompt.
[D:\~]$ 

就成功的删除了这个用户的登录的终端,让他强制的退出了

 

关于踢走一个用户命令

因为用户登录时,是有一个终端的进程,只要把那个终端的进程干掉就可以了

pkill 这个命令强制退出这个终端
#[root@server ~]# pkill -9 -t pts/0

kill 这个命令也行,只要找到这个进程的pid就可以了
kill -9 用户名id
killall这个命令也行
ps -au找到哪个用户登录了
killall -9 -u 用户名

 

三种杀死进程的比较:

1:kill这个命令是通过这个pid来杀死进程的

2:killall这个命令是通过这个进程的名字来杀死进程的

3:pkill更加的精确,可以根据进程的名字,来杀死,也可以踢走一个用户的终端

相同点:都可以使用信号-9之类的  

六:进程的优先级  

就是在系统繁忙的时候,调整优先级,优先执行那个进程,决定着对cpu的访问

进程的优先级有2个,pr;ni

1:优先级的大小

默认是-20--19的

优先级最高的是-20,最低的是19,成反比

2:查看优先级

ps  -o ni,command

[root@server /]# ps -o ni,command | head -10
 NI COMMAND
  0 -bash
  0 ps -o ni,command
  0 head -10

 

top,按住f这个选项,就能看的到

  1 root      20   0 systemd                                                                                        
      2 root      20   0 kthreadd                                                                                       
      3 root       0 -20 rcu_gp                                                                                         
      4 root       0 -20 rcu_par_gp                                                                                     
      6 root       0 -20 kworker/0:0H-events_highpri                                                                    
      9 root       0 -20 mm_percpu_wq                                                                                   
     10 root      20   0 rcu_tasks_kthre                                                                                
     11 root      20   0 rcu_tasks_rude_    

 

3:更改优先级(只有root用户能够修改优先级)

2种方式的更改

1:在启动进程之前修改

格式:nice -n 5 command

[root@server ~]# nice -n  5 vim a &
[1] 6583
[root@server ~]# ps -axo ni,command | grep vim 
  5 vim a
  0 grep --color=auto vim
[root@server ~]# 

这样就能修改启动前的进程的优先级

  

2:在启动进程之后修改

格式:renice 5 pid

[root@server ~]# ps -axo ni,command | grep vim 
  5 vim a
  0 grep --color=auto vim
[root@server ~]# pgrep vim
6583
[root@server ~]# renice 10 6583
6583 (process ID) 旧优先级为 5,新优先级为 10
[root@server ~]# 
#这样就修改成功了

  

七:作业控制

就是一些在后台运行的进程

案列:

jobs命令,就是查看当前终端的所有后台进程

 

1)将一个进程放在后台(&)

[root@server ~]# vim a & 
[2] 6600
[root@server ~]# jobs
[1]-  已停止               nice -n 5 vim a
[2]+  已停止               vim a

 

2)将一个正在运行的进程暂停(放入到后台)

[root@server /]# vim a

[1]+  已停止               vim a
[root@server /]# 

3)将暂停的程序放在后台运行(bg)

[root@server /]# jobs
[1]+  已停止               vim a
[root@server /]# bg 1
[1]+ vim a &

4)将暂停的程序放在前台运行(fg)

[root@server /]# jobs
[1]+  已停止               vim a
[root@server /]# fg 1
vim a
[root@server /]# jobs
[root@server /]#  

 

5)杀死后台进程

[root@server /]# vim &
[1] 6637
[root@server /]# jobs
[1]+  已停止               vim
[root@server /]# kill -9 %1

[1]+  已停止               vim
[root@server /]# jobs
[1]+  已杀死               vim
[root@server /]# 

  

总结:就是查看进程的命令有ps,top,pgrep,pidof

发送信号的命令 kill ,killall,pkill

修改优先级的nice,renice

作业控制:bg,fg,& ctrl+z

 

  

 

  

 

  

  

  

 

 

 

 

 

 

 

 

  

 

 

 

 

 

 

posted @ 2024-01-06 17:30  q_7  阅读(19)  评论(0)    收藏  举报