Skip to content

Linux的进程管理

Linux进程的相关概念

进程的类型

  • 前台进程:前台进程就是具有终端,可以和用户进行交互的进程
  • 后台进程:与前台进程相对,没有占用终端的就是后台进程。后台程序基本上不和用户交互,优先级比前台进程低。将需要执行的命令以 & 符号结束
  • 守护进程:守护(daemon)进程是特殊的后台进程,很多守护进程是系统引导的时候启动,一直运行直到系统关闭
    • 举例:
      1. crond
      2. httpd
      3. sshd
      4. mysqld
        • 进程名字以 d 结尾的一般都是守护进程

进程的标记

Warning

ID 为 0 的进程为idle进程,是系统创建的第一个进程
ID 为 1 的进程为init进程,是0号进程的子进程,完成系统初始化
init进程是所有用户进程的祖先进程

  • 进程ID

    • 进程ID是进程的唯一标记,每个进程拥有不同的ID
    • 进程ID表现为一个非负整数,最大值由操作系统限定
  • 父子进程的情况

    • 由于操作系统底层提供了fork函数可以创建进程,所以在某种情况下进程本身可以fork新的进程,由此就产生了父子进程关系,如下图:
      父子进程的情况
    • 父子进程的关系可以通过:pstree 来查看
  • 进程的状态标记

    • 查看方式,终端输入 man ps,PROCESS STATE CODES部分
      PROCESS STATE CODES
         Here are the different values that the s, stat and state output specifiers
         (header "STAT" or "S") will display to describe the state of a process:
      
                 D    uninterruptible sleep (usually IO)
                 R    running or runnable (on run queue)
                 S    interruptible sleep (waiting for an event to complete)
                 T    stopped by job control signal
                 t    stopped by debugger during the tracing
                 W    paging (not valid since the 2.6.xx kernel)
                 X    dead (should never be seen)
                 Z    defunct ("zombie") process, terminated but not reaped by its
                      parent
      
         For BSD formats and when the stat keyword is used, additional characters
         may be displayed:
      
                 <    high-priority (not nice to other users)
                 N    low-priority (nice to other users)
                 L    has pages locked into memory (for real-time and custom IO)
                 s    is a session leader
                 l    is multi-threaded (using CLONE_THREAD, like NPTL pthreads do)
                 +    is in the foreground process group
      
    • 状态小结 | 状态符号 | 状态说明 | | ------- | ------ | | R | (TASK_RUNNING), 进程正处于运行状态 | | S | (TASK_INTERRUPTIBLE), 进程正处于睡眠状态 | | D | (TASK_UNINTERRUPTIBLE), 进程正处于IO等待的睡眠状态 | | T | (TASK_STOPPED), 进程正处于暂停状态 | | Z | (TASK_DEAD or EXIT_ZOMBLE), 进程正处于退出状态,或僵尸进程 |

    • 具体查看进程的状态可以使用 ps aux | grep pid

      [root@jartins elastic_notes]# ps aux | grep 1672
      root      1672  0.4  0.2 104620  8932 ?        S<sl 8月27  21:23 /usr/local/aegis/aegis_client/aegis_11_73/AliYunDun
      root     16967  0.0  0.0 112832   988 pts/0    S+   11:30   0:00 grep --color=auto 1672
      

操作Linux进程的相关命令

  • ps命令
    • ps: 列出当前终端的进程
    • ps -u 用户名: 查看指定用户名下运行的进程
    • pa -aux | grep 名称: 查看指定程序运行的进程
    • ps -ef --forest: 打印出进程的父子状态
    • ps -aux --sort=-pcpu: 将进程按照cpu使用频率来进行排序
    • ps -aux --sort=-pmem: 将进程按照memory使用频率来进行排序
  • top命令

    • top title主要介绍
      1. PID: 进程的pid
      2. USER: 进程的用户
      3. PR: 进程的优先级
      4. NI: 用户进程空间内改变过优先级的进程占用CPU百分比
        • 假设在一个CPU轮转中,有2个runnable的进程A和B,如果他们的nice值都为0,假设内核会给他们每人分配1k个cpu时间片。但是假设进程A的为0,但是B的值为-10,那么此时CPU可能分别给A和B分配1k和1.5k的时间片。故可以形象的理解为,nice的值影响了内核分配给进程的cpu时间片的多少,时间片越多的进程,其优先级越高,其优先级值(PRI)越低。ni,就是改变过优先级的进程的占用CPU的百分比。
      5. VIRT: 进程的虚拟内存
      6. RES: 进程的实际内存
      7. SHR: 共享内存
      8. S: 进程的状态
      9. %CPU: cpu占比
      10. %MEM: memory占比
      11. TIME+: 进程运行的时间
      12. COMMAND: 进程的命令
  • kill命令

    • Linux中的kill命令用于发送信号给指定的进程,以控制其行为。常见的信号包括终止进程、重启进程、停止进程等。
      • kill PID:向进程号为PID的进程发送一个终止信号,使其终止执行。
      • kill -9 PID:向进程号为PID的进程发送一个强制终止信号,即无条件地终止进程的执行。
      • killall process_name:向进程名为process_name的所有进程发送终止信号。