Linux进程管理

Linux进程管理

  • 一、进程简介
  • 二、进程管理
    • 2.1、查看进程
      • 2.1.1、查看进程树
      • 2.1.2、查看进程快照
      • 2.1.3、进程动态排名
      • 2.1.4、检索进程
    • 2.2、控制进程
      • 2.2.1、进程的前后台调度
      • 2.2.2、杀死进程
      • 2.1.2、查看包含某个关键字的进程
      • 2.1.3、查看当前终端中运行的进程
      • 2.1.4、查看进程的资源使用情况
    • 2.3、更改进程优先级
      • 2.4.1、nice命令

一、进程简介

Linux是一个多用户多任务的操作系统,可以同时执行多个任务。

每个执行的任务都被称为进程(process)。

Linux系统中每运行一个程序都会创建一个进程。

进程就是一个正在运行的程序实例。

进程是一个动态的概念,可以与操作系统、其他进程以及用户进行数据交互。

每个进程启动后,系统都会自动为它分配一个唯一的数值,用于标识该进程,这个数值就被称为进程号(Process ID,PID)。进程号是这个进程的唯一标识,系统也是通过进程号来管理的。

二、进程管理

2.1、查看进程

2.1.1、查看进程树

  • pstree 命令(Processes Tree)
    • 命令格式: pstree [选项] [PID或用户名]
    • 常用命令选项
      • -a 显示完整的命令行
      • -p 列出对应的PID编号
[root@localhost ~]# pstree  
[root@localhost ~]# pstree  -p
[root@localhost ~]# pstree -a

[root@localhost ~]# pstree  lisi
bash
[root@localhost ~]# pstree  -p lisi
bash(17546)
  • systemd 上帝进程(所有进程的父进程)

2.1.2、查看进程快照

  • ps 命令 (Processes Snapshot)

    • 命令格式: ps [选项]

    • 常用选项

      • aux:
        • a 显示当前终端所有进程
        • x 当前用户在所有终端下的进程
        • u 以用户格式输出
      [root@localhost ~]# ps aux
      

      用户 进程ID 占用CPU 占用内存 虚拟内存 固定内存 终端 状态 起始状态 CPU时间 程序指令

      • -elf:
        • e 显示当前终端所有进程
        • l 以长格式显示
        • f 最完整的进程信息
      [root@localhost ~]# ps -elf
      

      输出内容中会显示PPID(父进程ID)

2.1.3、进程动态排名

  • top交互式工具
    • 命令格式: top [-d 刷新秒数] [-U 用户名]
[root@localhost ~]# top -d5
  • P 按照占用CPU进行排序
  • M 按照占用内存进行排序

2.1.4、检索进程

  • pgrep (Process Grep)

    • 命令格式 : pgrep [选项] 查询条件

    • 常用命令:

      • -l 输出进程名
      [root@localhost ~]# pgrep -l bash			//查找进程名中带有bash的
      17012 bash
      17476 bash
      17546 bash
      
      • -U 检索指定用户的进程
      [root@localhost ~]# pgrep -lU lisi			//查找用户lisi的进程
      17546 bash
      
      • -x 精确匹配完整的进程名
      [root@localhost ~]# pgrep -lx   crond		//查找进程名叫crond的
      1145 crond
      

2.2、控制进程

2.2.1、进程的前后台调度

  • 前台启动

    • 输入命令后,会占用当前的终端
  • 后台启动

    • 在命令行后加“&”,不占用当前终端
  • Ctrl+z 挂起当前进程(暂停运行转入后台)

  • jobs 命令

    • 查看后台任务列表
[root@localhost ~]# sleep 100 &
[1] 21162
[root@localhost ~]# jobs
[1]+  运行中               sleep 100 &
  • fg 命令
    • 将后台任务恢复到前台运行
[root@localhost ~]# fg 1
sleep 100

  • bg 命令
    • 激活后台被挂起任务
[root@localhost ~]# fg 1
sleep 100
^Z
[1]+  已停止               sleep 100

[root@localhost ~]# jobs
[1]+  已停止               sleep 100
[root@localhost ~]# bg 1
[1]+ sleep 100 &
[root@localhost ~]# jobs
[1]+  运行中               sleep 100 &

2.2.2、杀死进程

普通用户只能终止自己运行的进程,root用户可以终止所有。

  • Ctrl+C 结束前台进程

  • kill 命令

    • 命令格式1: kill [-9] PID
    • 命令格式2: kill [-9] %后台任务编号
    • -9 表示强制杀死
    [root@localhost ~]# sleep 100000 &
    [1] 23123
    [root@localhost ~]# jobs
    [1]+  运行中               sleep 100000 &
    [root@localhost ~]# kill 23123
    [root@localhost ~]# jobs
    [1]+  已终止               sleep 100000
    
    [root@localhost ~]# sleep 100000 &
    [1] 23168
    [root@localhost ~]# jobs
    [1]+  运行中               sleep 100000 &
    [root@localhost ~]# kill %1
    [root@localhost ~]# jobs
    [1]+  已终止               sleep 100000
    
  • killall 命令

    • 命令格式: killall [-9] 进程名
    • 命令格式: killall [-9] -u 用户名
    [root@localhost ~]# sleep 100000 &
    [1] 23300
    [root@localhost ~]# jobs
    [1]+  运行中               sleep 100000 &
    [root@localhost ~]# killall sleep
    [1]+  已终止               sleep 100000
    
  • pkill 命令

    • 命令格式: pkill 查找条件
    [root@localhost ~]# sleep 100000 &
    [1] 23363
    [root@localhost ~]# jobs
    [1]+  运行中               sleep 100000 &
    [root@localhost ~]# pkill -9 sleep
    [1]+  已杀死               sleep 100000
    
字段 说明
UID 运行进程的用户
PID 进程的ID
PPID 父进程ID
C CPU调度情况
STIME 进程启动的时间
TTY 终端号
TIME 进程使用的CPU时间
CMD 启动进程的命令

2.1.2、查看包含某个关键字的进程

使用管道与grep命令

例如:查看包含bash字段的进程

[root@localhost ~]# ps -ef | grep bash
root        861      1  0 06:20 ?        00:00:00 /bin/bash /usr/sbin/ksmtuned
root      11384  11376  0 06:21 pts/0    00:00:00 -bash
root      11729  11384  0 06:51 pts/0    00:00:00 grep --color=auto bash

2.1.3、查看当前终端中运行的进程

例如:以长格式显示当前终端运行的所有进程信息

[root@localhost ~]# ps -Tl
F S   UID    PID   SPID   PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
4 S     0  11384  11384  11376  0  80   0 - 29052 do_wai pts/0    00:00:00 bash
0 R     0  11772  11772  11384  0  80   0 - 38300 -      pts/0    00:00:00 ps

2.1.4、查看进程的资源使用情况

-aux选项,查看系统中所有进程的资源使用情况,包括:运行进程的用户、CPU使用率、内存使用率、驻留数据集大小、终端号、进程状态、进程启动时间、进程使用的CPU时间、以及运行进程的命令。

[root@localhost ~]# ps -aux
USER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root          1  0.0  0.3 128176  6848 ?        Ss   06:20   0:01 /usr/lib/systemd/systemd --swi
root          2  0.0  0.0      0     0 ?        S    06:20   0:00 [kthreadd]
root          3  0.0  0.0      0     0 ?        S    06:20   0:00 [ksoftirqd/0]
root          5  0.0  0.0      0     0 ?        S<   06:20   0:00 [kworker/0:0H]
root          7  0.0  0.0      0     0 ?        S    06:20   0:00 [migration/0]

2.3、更改进程优先级

在Linux系统中,每个进程在执行是都会被赋予一个优先等级,等级越高,进程获得的CPU时间就会越多。所以级别越高的进程,运行的时间就会越短,反之则需要较长的运行时间。

进程的优先等级范围为 - 20 ~ 19 , 其中 - 20 表示最高等级,19 表示最低。

等级 - 1 ~ - 20 只有root用户可以设置。

进程运行的默认级别为0 。

2.4.1、nice命令

命令格式:

[root@localhost ~]# nice --help
Usage: nice [OPTION] [COMMAND [ARG]...]
  • 示例:
[root@localhost ~]# sleep 10000 &				//系统默认启动的优先级为0
[1] 1269
[root@localhost ~]# nice sleep 10000 &			//使用nice命令启动的进程,默认优先级为10
[2] 1270
[root@localhost ~]# nice -19  sleep 10000 &		//-19 表示优先级为19
[3] 1271
[root@localhost ~]# nice --19  sleep 10000 &	//--19 表示优先级为-19
[4] 1272
[root@localhost ~]# nice --40  sleep 10000 &	
    //这里指定优先级为40,但实际上Linux系统优先级上限最高为20,所以这个进程的优先级为20
[5] 1273
[root@localhost ~]# ps -l			//查看进程信息
F S   UID    PID   PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
0 S     0   1269   1247  0  80   0 - 26987 hrtime pts/0    00:00:00 sleep
0 S     0   1270   1247  0  90  10 - 26987 hrtime pts/0    00:00:00 sleep
0 S     0   1271   1247  0  99  19 - 26987 hrtime pts/0    00:00:00 sleep
4 S     0   1272   1247  0  61 -19 - 26987 hrtime pts/0    00:00:00 sleep
4 S     0   1273   1247  0  60 -20 - 26987 hrtime pts/0    00:00:00 sleep

你可能感兴趣的:(Linux)