[ Content contribution] Linux分享之进程管理
Tofloor
poster avatar
废物头子
deepin
2023-11-23 19:03
Author

进程管理

  • 进程管理
    • 一、进程查看
      • (1)进程的概念
      • (2)进程查看命令
        • ps
        • top
        • pgrep
        • pidof
      • (3)父子进程,孤儿进程,僵尸进程
        • 父子进程
        • 孤儿进程
        • 僵尸进程
    • 二、进程管理
      • (1)进程的启动与控制
        • 进程控制
        • 进程启动
      • (2)进程优先级

一、进程查看

(1)进程的概念

当一个程序运行的时候,就会产生进程。为了区分进程,系统会给进程分配一个唯一的ID号——PID。

这里的唯一是指在程序运行的这一刻这个ID是唯一的。当程序结束运行,系统会收回ID,在其他程序运行的时候会将ID重新分配出去。不表示系统会一直使用这个ID。

(2)进程查看命令

ps

作用:查看进程状态信息

语法:

ps [options]

常用选项:
-a		查看所有终端的进程
-u		查看进程的拥有人
-x		查看没有控制终端的进程
-ef		查看系统所有进程的详细信息
-axo	查看指定的内容
--sort	排序

eg:
[root@localhost ~]# ps aux
USER         PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root           2  0.0  0.0      0     0 ?        S    15:20   0:00 [kthreadd]

USER	进程的是由哪个用户产生的
PID		进程的id号
%CPU	进程占用的CPU百分比
%MEM	进程占用的物理内存百分比
VSZ		进程占用的虚拟内存大小
RSS		进程占用的物理内存大小
TTY		进程运行的终端
		?			 内核运行的进程,没有在终端运行
		tty1-6	 	 本地运行的终端
		pts/0-255	 虚拟终端或者远程登录的终端
STAT	进程的状态
		S	休眠
		D	不可中断
		R	正在运行
		Z	僵尸进程
		s	子进程
START	进程开始的时间
TIME	进程运行的时间
COMMAND	进程命令

ps axo user,pid,ppid,command
USER         PID    PPID COMMAND
root           2       0 [kthreadd]
top

作用:实时查看进程状态

语法:

top [options]

常用选项:
-d <秒数>:指定top命令的刷新间隔,单位为秒
-p :仅显示指定pid的进程信息
-u <用户名>:仅显示指定用户名的进程信息

eg:
[root@localhost ~]# top
top - 15:49:15 up 29 min,  5 users,  load average: 0.06, 0.02, 0.00
Tasks: 313 total,   1 running, 311 sleeping,   0 stopped,   1 zombie
%Cpu(s):  0.0 us,  0.0 sy,  0.0 ni, 99.9 id,  0.0 wa,  0.1 hi,  0.0 si,  0.0 st
MiB Mem :   3635.0 total,   1711.9 free,   1481.2 used,    686.1 buff/cache
MiB Swap:   2048.0 total,   2048.0 free,      0.0 used.   2153.8 avail Mem 

    PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND                                                                                                           
   3772 root      20   0  226156   4404   3400 R   0.7   0.1   0:00.03 top   
   
top显示内容解释
第一行
15:49:15						当前系统时间
up 29 min						系统运行的时间,这里表示系统运行了29分钟
5 users							当前登录的用户数,这里表示当前系统用5个用户登录
load average: 0.06, 0.02, 0.00	系统平均负载,三个数值分别表示1分钟、5分钟、15分钟前到现在的平均值

第二行
Tasks: 313 total		进程总数
1 running				正在运行的进程数
311 sleeping			休眠中的进程数
0 stopped				停止的进程数
1 zombie				僵尸进程数

第三行
0.0 us			用户空间占用的CPU百分比
0.0 sy			内核空间占用的CPU百分比
0.0 ni			改变过优先级的进程占用CPU百分比
99.9 id			空闲CPU百分比
0.0 wa			I/O等待占用CPU的百分比
0.1 hi			硬中断占用的CPU百分比
0.0 si			软中断占用的CPU百分比
0.0 st			虚拟机占用的CPU百分比

第四行
3635.0 total		物理内存总量
1711.9 free			空闲的物理内存总量
1481.2 used			使用的物理内存总量
686.1 buff/cache	内存的缓存量

第五行
2048.0 total		SWAP总量
2048.0 free			SWAP剩余量
0.0 used			SWAP使用量
2153.8 avail Mem 	下一次进程可分配的物理内存量

进程信息
PID			进程ID号 
USER		进程的是由哪个用户产生的
PR			进程优先级,动态优先级由内核进行挑战
NI			nice值,静态优先级,由用户指定,值越小优先级越高
VIRT		进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES
RES			进程使用的、未被换出的物理内存大小,单位kb。
SHR			共享内存大小
S			进程状态。D=不可中断的睡眠状态 R=运行 S=睡眠 T=跟踪/停止 Z=僵尸进程
%CPU		上次更新到现在的CPU时间占用百分比
%MEM		进程使用的物理内存百分比
TIME+		进程使用的CPU时间总计,单位1/100秒
COMMAND		进程名称

常用交互命令
数值1:查看每一个逻辑CPU的状态
c:切换显示命令名称和完整命令
M:按照内存占用情况排序
P:根据CPU使用百分比大小排序
T:根据时间/累计时间进行排序
f:可以选择显示的内容
k:结束进程
pgrep

作用:通过程序的名称来查询进程

语法:

pgrep [options]

常用选项
-U		查找某个用户的进程
-G		查看某个组的进程
-P		根据父进程,查找所有子进程
-l		不仅打印pid,也打印进程名
-o		多个进程时,查找最先启动的。
-n		多个进程时,查找最后启动的

eg:
[root@localhost ~]# pgrep ssh -l
1035 sshd
3393 sshd
3399 sshd

[root@localhost ~]# pgrep ssh -l -o
1035 sshd

[root@localhost ~]# pgrep ssh -l -n
3399 sshd
pidof

作用:查找准确的进程名的pid

eg:
[root@localhost ~]# pidof sshd 
3399 3393 1035

[root@localhost ~]# ps -p $(pidof sshd)
    PID TTY      STAT   TIME COMMAND
   1035 ?        Ss     0:00 sshd: /usr/sbin/sshd -D [listener] 0 of 10-100 startups
   3393 ?        Ss     0:00 sshd: root [priv]
   3399 ?        R      0:00 sshd: root@pts/0

(3)父子进程,孤儿进程,僵尸进程

父子进程

父子进程,就是在一共进程的基础上通过fork()函数创建一共完全独立的进程。这个独立的进程成为子进程,子进程会继承父进程的属性,但运行过程不影响父进程。当一个进程需要做一些危险任务时,父进程会通过子进程进行,来避免自己的进程崩溃。

孤儿进程

当父进程先于子进程退出,子进程就会变成孤儿进程(没有孤儿状态)。当一个子进程成为孤儿进程后,马上会被操作系统的1号进程领养(管理)。

孤儿进程会被系统回收,对系统没有危害。

僵尸进程

当一个子进程运行结束时,会向父进程发生信号,父进程需要主动捕捉这个信号来结束子进程。如果父进程无法接收子进程的退出信号,子进程就会一个存在,久而久之就会造成内存泄漏。

解决方法:

  • 重启系统,僵尸进程自动释放
  • 干掉父进程,子进程由僵尸进程转为孤儿进程,由1号进程结束子进程
  • 进程进程等待。

二、进程管理

(1)进程的启动与控制

进程控制

当我们需要去控制进程的时候,可以通过发送不同的信号来实现。当进程接收到信号时,会根据信号的作用来进行对应操作。

我们使用kill命令来手动发送信号。默认发送15的信号。

signal 15——结束进程

signal 9 ——强制结束进程(在生产环境中不推荐使用)

signal 1 ——重新读取配置文件(服务本身要支持重新改读取配置文件)

使用 man 7 signal可以查看完整的信号列表

用法:

通过进程号:kill [signal] pid...

通过名称:killall [signal] comm...

通过模块:pkill [-signal] pattern

三者区别
kill命令是向指定pid的进程发送信号,需要与ps等查看命令一起使用,killall直接对进程名字进行操作,可以向同名的所有进程发送信号,pkill与killall一样可以通过进程名来结束进程,除此之外pkill可以根据终端名称来强制将用户踢出登录。
使用who命令查看当前系统登录的用户
[root@localhost ~]# who
root     seat0        2023-08-08 16:00 (login screen)
root     tty2         2023-08-08 16:00 (tty2)
root     pts/0        2023-08-08 16:00 (192.168.211.1)
admin    tty3         2023-08-09 12:01
将tty3的admin踢出登录
[root@localhost ~]# pkill -9 -t tty3  
[root@localhost ~]# who
root     seat0        2023-08-08 16:00 (login screen)
root     tty2         2023-08-08 16:00 (tty2)
root     pts/0        2023-08-08 16:00 (192.168.211.1)
进程启动

1)手工启动

  • 前台启动:用户输入命令,直接执行程序

  • 后台启动:在命令后加入 &符号,输出信息中包括后台任务序号和PID号。

    [root@localhost ~]# firefox baidu.com &
    [1] 5788
    

2)进程的前后台调度

  • Ctrl+Z:将当前进程挂起,即调入后台并停止执行。

  • fg命令:将后台进程恢复到前台运行,可指定任务序列号。

    [root@localhost ~]# fg 1
    ping www.baidu.com
    
  • jobs命令:查看处于后台的任务列表

    [root@localhost ~]# jobs
    [1]+  Stopped                 ping www.baidu.com
    

3)进程的终止

  • Ctrl+c:终端正在执行的任务
  • 使用 killkillall命令

(2)进程优先级

进程优先级决定了在系统资源十分紧张的时候,是否优先保障该进程对CPU的需求。

在Linux中优先级分为两类:

  • 动态优先级(PR):由内核进行调整
  • 静态优先级(NI):由用户进行调整,保障程序的运行。在系统中只有root用户可以降低nice值。

NICE值的取值范围:-20~19,默认值为0,nice值越低优先级越高。

调整优先级

1)调整已经存在的进程优先级

[root@localhost ~]# vim text
[root@localhost ~]# pgrep vim -l
6610 vim
[root@localhost ~]# renice -n -20 6610
6610 (process ID) old priority 0, new priority -20
[root@localhost ~]# ps -o pid,nice,comm -p 6610
    PID  NI COMMAND
   6610 -20 vim

2)在程序启动时指定优先级

[root@localhost ~]# nice -n -19 vim text
[root@localhost ~]# pgrep vim
6737
[root@localhost ~]# ps -o pid,nice,comm -p 6737
    PID  NI COMMAND
   6737 -19 vim
Reply Favorite View the author
All Replies
阿尼樱奈奈
Moderator
2023-11-23 19:04
#1

like

Reply View the author