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


相关文章
|
9月前
|
Ubuntu Linux Anolis
Linux系统禁用swap
本文介绍了在新版本Linux系统(如Ubuntu 20.04+、CentOS Stream、openEuler等)中禁用swap的两种方法。传统通过注释/etc/fstab中swap行的方式已失效,现需使用systemd管理swap.target服务或在/etc/fstab中添加noauto参数实现禁用。方法1通过屏蔽swap.target适用于新版系统,方法2通过修改fstab挂载选项更通用,兼容所有系统。
819 3
Linux系统禁用swap
|
9月前
|
Linux
Linux系统修改网卡名为eth0、eth1
在Linux系统中,可通过修改GRUB配置和创建Udev规则或使用systemd链接文件,将网卡名改为`eth0`、`eth1`等传统命名方式,适用于多种发行版并支持多网卡配置。
1386 3
|
8月前
|
监控 关系型数据库 MySQL
在CentOS系统中,如何统计哪个进程打开了文件描述符?
利用上述方法,你可以有效地监控和统计CentOS系统中的进程打开的文件描述符数量,以帮助排查错误或优化系统配置。通过组合使用各种工具和命令,可以获得对系统状态和行为的深入了解,进而做出相应的调整和
359 5
|
Ubuntu Linux 网络安全
Linux系统初始化脚本
一款支持Rocky、CentOS、Ubuntu、Debian、openEuler等主流Linux发行版的系统初始化Shell脚本,涵盖网络配置、主机名设置、镜像源更换、安全加固等多项功能,适配单/双网卡环境,支持UEFI引导,提供多版本下载与持续更新。
880 3
Linux系统初始化脚本
|
10月前
|
运维 Linux 开发者
Linux系统中使用Python的ping3库进行网络连通性测试
以上步骤展示了如何利用 Python 的 `ping3` 库来检测网络连通性,并且提供了基本错误处理方法以确保程序能够优雅地处理各种意外情形。通过简洁明快、易读易懂、实操性强等特点使得该方法非常适合开发者或系统管理员快速集成至自动化工具链之内进行日常运维任务之需求满足。
655 18
|
9月前
|
安全 Linux Shell
Linux系统提权方式全面总结:从基础到高级攻防技术
本文全面总结Linux系统提权技术,涵盖权限体系、配置错误、漏洞利用、密码攻击等方法,帮助安全研究人员掌握攻防技术,提升系统防护能力。
1034 1
|
9月前
|
监控 安全 Linux
Linux系统提权之计划任务(Cron Jobs)提权
在Linux系统中,计划任务(Cron Jobs)常用于定时执行脚本或命令。若配置不当,攻击者可利用其提权至root权限。常见漏洞包括可写的Cron脚本、目录、通配符注入及PATH变量劫持。攻击者通过修改脚本、创建恶意任务或注入命令实现提权。系统管理员应遵循最小权限原则、使用绝对路径、避免通配符、设置安全PATH并定期审计,以防范此类攻击。
1344 1
|
10月前
|
缓存 监控 Linux
Linux系统清理缓存(buff/cache)的有效方法。
总结而言,在大多数情形下你不必担心Linux中buffer与cache占用过多内存在影响到其他程序运行;因为当程序请求更多内存在没有足够可用资源时,Linux会自行调整其占有量。只有当你明确知道当前环境与需求并希望立即回收这部分资源给即将运行重负载任务之前才考虑上述方法去主动干预。
2504 10