Linux进程管理

Linux进程管理

进程定义

分配内存, 已分配内存的地址空间

安全属性, 进程的运⾏身份和权限

进程代码, 运⾏⼀个或多个的线程

进程状态, 进程运⾏后的多种状态

  • 进程是已启动的可执行程序的运行实例。
  • 包含:分配内存、安全属性、进程代码、进程状态。
  • 静态程序:二进制文件(如/bin/ls, /usr/sbin/sshd)。
  • 动态进程:程序运行的过程,具有生命周期及运行状态。

进程生命周期

  1. 创建阶段:通过fork()或exec()系统调用创建进程。
  2. 就绪阶段:创建后放置在系统就绪队列中,等待CPU分配。
  3. 运行阶段:CPU分配后开始执行,此时进程状态为运行。
  4. 阻塞阶段:执行过程中遇到阻塞事件(如I/O操作)进入阻塞状态,不再占用CPU资源。
  5. 结束阶段:任务完成或被终止时,进程被系统回收,标记为僵尸进程,直到父进程调用wait()或waitpid()回收资源,最终销毁。

进程监控与管理

静态监控进程

  • - 使用`ps`命令了解进程信息:
    
    - 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+ + //表示是前台的进程组
    
      vx: WingspanGo
    
      vx: WingspanGops 命令使⽤⽅法
    

动态监控进程

  • 使用top命令:
  • h: 帮助。
  • z: 彩色信息展示。
  • 1: 显示所有CPU的负载。
  • s: 设置刷新时间。
  • b: 高亮显示处于R状态的进程。
  • m: 按内存使用百分比排序。
  • p: 按CPU使用百分比排序。
  • r: 对排序进行反转。
  • f: 自定义显示字段。
  • k: 杀死指定PID进程。
  • w: 保存top环境设置。
  • q: 退出。

进程管理方法

信号管理进程

  • 使用kill命令发送信号与进程通信:
  • 1: 挂起信号,重新配置进程。
  • 2: 终止信号,与ctrl+c作用相同。
  • 9: 直接杀死进程,不能被进程捕获。
  • 15: 终止进程。
  • 18: 继续执行被暂停的进程。
  • 19: 暂停进程。
  • 20: 用户停止请求,类似ctrl+z。

常⻅信号列表:

数字信号    信号别名    作⽤

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

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

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

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

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

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

19   STOP    暂停进程

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

nohub

nohub的命令的作⽤是可以将程序以忽略挂起信号的⽅式运⾏。常⻅的⽤法是与&⼀起使⽤,将命令放到后台运

⾏,并且终端挂掉之后还会运⾏。

将程序放到后台运⾏⽤两中⽅法:

1. command & :后台运⾏,关掉终端之后程序会停⽌。

2. nohub command & :后台运⾏,关掉终端程序不会停⽌,还会继续运⾏。

 20:50:17 up 95 days, 9:30, 1 user, load average: 0.00, 0.00, 0.00

USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT

wing pts/0 115.175.115.39 20:22 0.00s 0.01s 0.00s sshd: wing [priv]

//终⽌ pts/0上所有进程, 除了bash本身

[root@wing ~]# pkill -t pts/0

//终⽌pts/0上所有进程, 并且bash也结束(⽤户被强制退出)

[root@wing ~]# pkill -9 -t pts/0

//列出wing⽤户的所有进程,-l输出pid

[root@linux-wing ~]# pgrep -l -u wing

32206 sshd

32207 bash

[root@wing ~]# sleep 3000 & //运⾏程序(时),让其在后台执⾏

[root@wing ~]# sleep 4000 //^Z,将前台的程序挂起(暂停)到后台

[2]+ Stopped sleep 4000

[root@wing ~]# ps aux |grep sleep

[root@wing ~]# jobs //查看后台作业

[1]- Running sleep 3000 &

[2]+ Stopped sleep 4000

[root@wing ~]# bg %2 //让作业 2 在后台运⾏

[root@wing ~]# fg %1 //将作业 1 调回到前台

[root@wing ~]# kill %1 //kill 1,终⽌ PID 为 1 的进程

[root@wing ~]# (while :; do date; sleep 2; done) & //进程在后台运⾏,但输出依然在当前终端

[root@wing ~]# (while :; do date; sleep 2; done) &>/dev/null &

注意点:

\1. 如果使⽤nohub执⾏程序未显示进⾏标准输出流重定向,则标准输出流默认重定向到当前⼯作⽬录的

nohub.out⽂件中。如果当前⼯作⽬录的nohub.out⽂件不可写,输出重定向到$HOME/nohub.out⽂件中。

如果没有⽂件能创建或者打开⽤于追加,那么command参数指定的命令不可调⽤。

\2. 如果标准错误未显示重定向,那么标准错误默认重定向到与标准输出相同的⽂件。
posted @ 2024-08-08 20:53  hhhaaa12138  阅读(15)  评论(0编辑  收藏  举报