系统管理-Linux系统进程管理

简介: 系统管理-Linux系统进程管理
  • 什么是进程
  • 进程生命周期
  • 监控和管理进程
  • 静态监控进程
  • 动态监控进程
  • 信号管理进程
  • 后台进程管理

什么是进程

进程是已启动的可执行程序的运行实例,进程有以下组成部分:
  1. 分配内存, 已分配内存的地址空间
  2. 安全属性, 进程的运行身份和权限
  3. 进程代码, 运行一个或多个的线程
  4. 进程状态, 进程运行后的多种状态
  5. 静态程序, 二进制文件, 静态/bin/ls, /usr/sbin/sshd

动态进程, 程序运行的过程, 有生命周期及运行状态

进程的运行环境,包括以下几个部分:
  1. 局部和全局变量
  2. 当前的调度上下文
  3. 分配给进程使用的系统资源,例如文件描述符、网络端口等
  4. 给进程分配对应的pid,ppid

image.png

程序运行时进程的状态关系:
  1. 父进程复制自己的地址空间创建新的子进程, 子进程可以继承父进程(ppid)的环境变量
  2. 每个进程都有自己的唯一ID(PID)
  3. 进程是由systemd这个父进程派生出来的子进程
  4. 子进程在运行自己的程序代码的时候, 父进程往往会进入到睡眠状态
  5. 子进程完成程序代码发出退出信号请求
  6. 子进程已经关闭或丢弃了其资源环境, 剩余的部分称之为僵停(僵尸Zombie)
  7. 父进程在子进程退出时收到信号会被唤醒, 清理剩余的结构,然后继续执行其自己的程序代码

监控和管理进程

  1. 在多任务处理操作系统中,每个CPU(或核心)在一个时间点上只能处理一个进程
  2. 在进程运行时,它对 CPU时间和资源分配的要求会不断变化,从而为进程分配一个状态,它随着环境要求而改变

静态监控进程

静态查看进程通常使用ps命令

了解进程如下选项:

  1. PID,PPID
  2. 当前的进程状态
  3. 内存的分配情况
  4. CPU 和已花费的时间
  5. 用户UID决定进程的特权
[root@liza ~]# ps aux | less
USER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root          1  0.0  0.3  46276  5836 ?        Ss   Feb27   0:46 /usr/lib/systemd/systemd --system --deserialize 21
USER:   //运行进程的用户
PID:    //进程 ID
%CPU:   //CPU 占用率
%MEM:   //内存占用率
VSZ:    //占用虚拟内存
RSS:    //占用实际内存 驻留内存 
TTY:    //进程运行的终端
STAT:   //进程状态 man ps (/STATE)
    R   //进程运行
    S   //可中断睡眠
    D   //不可中断睡眠
    Z   //僵尸进程
    X   //进程已经退出
    T   //进程被暂停
    Ss s        //进程的领导者,父进程
    S< <        //优先级较高的进程
    SN N        //优先级较低的进程
    R+ +        //表示是前台的进程组
    Sl          //以线程的方式运行
    START:      //进程的启动时间
    TIME:       //进程占用 CPU 的总时间
    COMMAND:    //进程文件,进程名
ps命令使用方法

对进程的CPU进行排序展示

[root@liza ~]# ps aux --sort %cpu |less
[root@liza ~]# ps aux --sort -%cpu |less

自定义显示字段

[root@liza ~]# ps axo user,pid,ppid,%mem,command |grep nginx
root      14724  14498  0.0 grep --color=auto nginx

显示进程的子进程

[root@liza ~]# yum install -y httpd
[root@liza ~]# systemctl restart httpd
[root@liza ~]# ps auxf | grep httpd
root      14940  0.0  0.0 112660   972 pts/1    S+   15:55   0:00          \_ grep --color=auto httpd
root      14915  0.0  0.2 226240  5164 ?        Ss   15:54   0:00 /usr/sbin/httpd -DFOREGROUND
apache    14925  0.0  0.1 228324  3156 ?        S    15:55   0:00  \_ /usr/sbin/httpd -DFOREGROUND
apache    14926  0.0  0.1 228324  3156 ?        S    15:55   0:00  \_ /usr/sbin/httpd -DFOREGROUND
apache    14927  0.0  0.1 228324  3156 ?        S    15:55   0:00  \_ /usr/sbin/httpd -DFOREGROUND
apache    14928  0.0  0.1 228324  3156 ?        S    15:55   0:00  \_ /usr/sbin/httpd -DFOREGROUND
apache    14929  0.0  0.1 228324  3156 ?        S    15:55   0:00  \_ /usr/sbin/httpd -DFOREGROUND

查看指定进程PID

[root@liza ~]# ps aux | grep sshd.pid
root      14942  0.0  0.0 112660   980 pts/1    S+   15:56   0:00 grep --color=auto sshd.pid
[root@liza ~]# cat /run/sshd.pid 
1250

pgrep常用参数, -l -a

[root@liza ~]# pgrep sshd
1250
14494
[root@liza ~]# pidof sshd
14494 1250

查看进程树

[root@liza ~]# pstree

动态监控进程

[root@liza ~]# top
[root@liza ~]# top -d 1
[root@liza ~]# top -d 1 -p 10126
[root@liza ~]# top -d 1 -p 10126,1 
[root@liza ~]# top -d 1 -u apache
[root@liza ~]# top -d 1 -b -n 2 > top.txt

top 常见指令

h 查看帮出

z 以彩色信息展示

1 显示所有CPU的负载

s 设置刷新时间

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

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

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

R 对排序进行反转

f 自定义显示字段

k kill掉指定PID进程

W 保存top环境设置 ~/.toprc

q 退出

系统负载的计算和意义

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

[root@liza ~]# w
 16:04:41 up 30 min,  2 users,  load average: 0.00, 0.01, 0.05
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
root     :0       :0               03Jan21 ?xdm?  28.35s  0.10s /usr/libexec/gnome-session-binary --session gnome-classic
root     pts/1    192.168.112.1    15:37    1.00s  0.30s  0.02s w
假设当前计算机有4个核心的cpu,当前的负载是2.92

cpu1 cpu2 cpu3 cpu4

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

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

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

信号管理进程

  1. 使用kill命令发送信号与进程通信
  2. 定义守护进程的角色
  3. 结束用户会话和进程

kill,killall,pgrep,pkill

列出所有支持的信号
[root@liza ~]# 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
16) SIGSTKFLT 17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP
21) SIGTTIN 22) SIGTTOU 23) SIGURG  24) SIGXCPU 25) SIGXFSZ
26) SIGVTALRM 27) SIGPROF 28) SIGWINCH  29) SIGIO 30) SIGPWR
31) SIGSYS  34) SIGRTMIN  35) SIGRTMIN+1  36) SIGRTMIN+2  37) SIGRTMIN+3
38) SIGRTMIN+4  39) SIGRTMIN+5  40) SIGRTMIN+6  41) SIGRTMIN+7  42) SIGRTMIN+8
43) SIGRTMIN+9  44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13
48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12
53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9  56) SIGRTMAX-8  57) SIGRTMAX-7
58) SIGRTMAX-6  59) SIGRTMAX-5  60) SIGRTMAX-4  61) SIGRTMAX-3  62) SIGRTMAX-2
63) SIGRTMAX-1  64) SIGRTMAX  
数字信号 信号别名 作用

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

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

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

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

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

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

19 STOP 暂停进程

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

后台进程管理

作业控制是一个命令行功能,允许一个 shell 实例来运行和管理多个命令。

如果没有作业控制,父进程 fork()一个子进程后,将 sleeping,直到子进程退出。

使用作业控制,可以选择性暂停,恢复,以及异步运行命令,让 shell可以在子进程运行期间返回接受其他命令。

前台进程,后台进程jobs,bg,fg ctrl + Z,ctrl + C, ctrl + B

运行程序(时),让其在后台执行
[root@liza ~]# sleep 3000 &
[1] 15235
将前台的程序挂起(暂停)到后台
[root@liza ~]# sleep 4000
[2]+ Stopped sleep 4000
[root@liza ~]# ps aux |grep sleep
root      15235  0.0  0.0 107904   348 pts/1    S    16:14   0:00 sleep 3000
root      15243  0.0  0.0 107904   612 ?        S    16:14   0:00 sleep 60
root      15247  0.0  0.0 112660   972 pts/1    S+   16:15   0:00 grep --color=auto sleep
查看后台作业查
[root@liza ~]# jobs
[1]- Running sleep 3000 & 
[2]+ Stopped sleep 4000
让作业 2 在后台运行
[root@liza ~]# bg %2
将作业 1 调回到前台
[root@liza ~]# fg %1
kill 1,终止 PID 为 1 的进程
[root@liza ~]# kill %1
进程在后台运行,但输出依然在当前终端
[root@liza ~]# (while :; do date; sleep 2; done) &
[root@liza ~]# (while :; do date; sleep 2; done) &>/dev/null &
[2] 15376
[1]   Terminated              ( while :; do
    date; sleep 2;
done )


目录
打赏
0
0
0
0
12
分享
相关文章
Linux内核中的线程和进程实现详解
了解进程和线程如何工作,可以帮助我们更好地编写程序,充分利用多核CPU,实现并行计算,提高系统的响应速度和计算效能。记住,适当平衡进程和线程的使用,既要拥有独立空间的'兄弟',也需要在'家庭'中分享和并行的成员。对于这个世界,现在,你应该有一个全新的认识。
125 67
Linux系统中的cd命令:目录切换技巧
踏过千山,越过万水,人生就是一场不断前行的旅程,总充满了未知与挑战。然而,“cd”命令如同你的旅伴,会带你穿梭在如棋盘一般的文件系统中,探索每一处未知。希望你能从“cd”命令中找到乐趣,像是掌控了一种络新妙的魔法,去向未知进发,开始你的探索之旅。
83 24
|
3天前
|
Linux系统下快速批量创建和删除文件的方法
总的来说,使用shell脚本来批量处理文件是一种非常强大的工具,只要你愿意花时间学习和实践,你会发现它能大大提高你的工作效率。
38 19
Linux系统之su命令的基本使用
Linux系统之su命令的基本使用
56 2
Linux系统之su命令的基本使用
在Ubuntu Linux系统下如何搭建并安装EDK2
以上就是在Ubuntu Linux系统下搭建并安装EDK2的过程。这个过程可能会有些复杂,但只要按照步骤一步步来,应该不会有太大问题。如果在过程中遇到任何问题,都可以在网上找到相应的解决方案。希望这个指南能对你有所帮助!
43 17
|
27天前
|
Linux系统资源管理:多角度查看内存使用情况。
要知道,透过内存管理的窗口,我们可以洞察到Linux系统运行的真实身姿,如同解剖学家透过微观镜,洞察生命的奥秘。记住,不要惧怕那些高深的命令和参数,他们只是你掌握系统"魔法棒"的钥匙,熟练掌握后,你就可以骄傲地说:Linux,我来了!
113 27
|
26天前
|
Linux系统管理:服务器时间与网络时间同步技巧。
以上就是在Linux服务器上设置时间同步的方式。然而,要正确运用这些知识,需要理解其背后的工作原理:服务器根据网络中的其他机器的时间进行校对,逐步地精确自己的系统时间,就像一只犹豫不决的啮齿动物,通过观察其他啮齿动物的行为,逐渐确定自己的行为逻辑,既简单,又有趣。最后希望这个过程既能给你带来乐趣,也能提高你作为系统管理员的专业素养。
105 20
|
1月前
|
Linux系统ext4磁盘扩容实践指南
这个过程就像是给你的房子建一个新的储物间。你需要先找到空地(创建新的分区),然后建造储物间(格式化为ext4文件系统),最后将储物间添加到你的房子中(将新的分区添加到文件系统中)。完成这些步骤后,你就有了一个更大的储物空间。
133 10
【Linux】进程概念和进程状态
本文详细介绍了Linux系统中进程的核心概念与管理机制。从进程的定义出发,阐述了其作为操作系统资源管理的基本单位的重要性,并深入解析了task_struct结构体的内容及其在进程管理中的作用。同时,文章讲解了进程的基本操作(如获取PID、查看进程信息等)、父进程与子进程的关系(重点分析fork函数)、以及进程的三种主要状态(运行、阻塞、挂起)。此外,还探讨了Linux特有的进程状态表示和孤儿进程的处理方式。通过学习这些内容,读者可以更好地理解Linux进程的运行原理并优化系统性能。
55 4
|
1月前
|
微服务2——MongoDB单机部署4——Linux系统中的安装启动和连接
本节主要介绍了在Linux系统中安装、启动和连接MongoDB的详细步骤。首先从官网下载MongoDB压缩包并解压至指定目录,接着创建数据和日志存储目录,并配置`mongod.conf`文件以设定日志路径、数据存储路径及绑定IP等参数。之后通过配置文件启动MongoDB服务,并使用`mongo`命令或Compass工具进行连接测试。此外,还提供了防火墙配置建议以及服务停止的两种方法:快速关闭(直接杀死进程)和标准关闭(通过客户端命令安全关闭)。最后补充了数据损坏时的修复操作,确保数据库的稳定运行。
82 0
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等