系统管理-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 )


相关文章
|
1月前
|
算法 Linux 调度
深入理解Linux操作系统的进程管理
本文旨在探讨Linux操作系统中的进程管理机制,包括进程的创建、执行、调度和终止等环节。通过对Linux内核中相关模块的分析,揭示其高效的进程管理策略,为开发者提供优化程序性能和资源利用率的参考。
68 1
|
20天前
|
存储 缓存 监控
Linux缓存管理:如何安全地清理系统缓存
在Linux系统中,内存管理至关重要。本文详细介绍了如何安全地清理系统缓存,特别是通过使用`/proc/sys/vm/drop_caches`接口。内容包括清理缓存的原因、步骤、注意事项和最佳实践,帮助你在必要时优化系统性能。
155 78
|
24天前
|
Linux Shell 网络安全
Kali Linux系统Metasploit框架利用 HTA 文件进行渗透测试实验
本指南介绍如何利用 HTA 文件和 Metasploit 框架进行渗透测试。通过创建反向 shell、生成 HTA 文件、设置 HTTP 服务器和发送文件,最终实现对目标系统的控制。适用于教育目的,需合法授权。
55 9
Kali Linux系统Metasploit框架利用 HTA 文件进行渗透测试实验
|
20天前
|
存储 监控 Linux
嵌入式Linux系统编程 — 5.3 times、clock函数获取进程时间
在嵌入式Linux系统编程中,`times`和 `clock`函数是获取进程时间的两个重要工具。`times`函数提供了更详细的进程和子进程时间信息,而 `clock`函数则提供了更简单的处理器时间获取方法。根据具体需求选择合适的函数,可以更有效地进行性能分析和资源管理。通过本文的介绍,希望能帮助您更好地理解和使用这两个函数,提高嵌入式系统编程的效率和效果。
87 13
|
27天前
|
SQL 运维 监控
南大通用GBase 8a MPP Cluster Linux端SQL进程监控工具
南大通用GBase 8a MPP Cluster Linux端SQL进程监控工具
|
20天前
|
Ubuntu Linux C++
Win10系统上直接使用linux子系统教程(仅需五步!超简单,快速上手)
本文介绍了如何在Windows 10上安装并使用Linux子系统。首先,通过应用商店安装Windows Terminal和Linux系统(如Ubuntu)。接着,在控制面板中启用“适用于Linux的Windows子系统”并重启电脑。最后,在Windows Terminal中选择安装的Linux系统即可开始使用。文中还提供了注意事项和进一步配置的链接。
40 0
|
1月前
|
存储 Oracle 安全
服务器数据恢复—LINUX系统删除/格式化的数据恢复流程
Linux操作系统是世界上流行的操作系统之一,被广泛用于服务器、个人电脑、移动设备和嵌入式系统。Linux系统下数据被误删除或者误格式化的问题非常普遍。下面北亚企安数据恢复工程师简单聊一下基于linux的文件系统(EXT2/EXT3/EXT4/Reiserfs/Xfs) 下删除或者格式化的数据恢复流程和可行性。
|
2月前
|
Linux 网络安全 数据安全/隐私保护
Linux 超级强大的十六进制 dump 工具:XXD 命令,我教你应该如何使用!
在 Linux 系统中,xxd 命令是一个强大的十六进制 dump 工具,可以将文件或数据以十六进制和 ASCII 字符形式显示,帮助用户深入了解和分析数据。本文详细介绍了 xxd 命令的基本用法、高级功能及实际应用案例,包括查看文件内容、指定输出格式、写入文件、数据比较、数据提取、数据转换和数据加密解密等。通过掌握这些技巧,用户可以更高效地处理各种数据问题。
148 8