命令 ps 查看当前系统的进程状态

命令 ps 介绍

ps 命令用于报告当前系统的进程状态。可以搭配 kill 指令随时中断、删除不必要的程序。ps 命令是最基本同时也是非常强大的进程查看命令,使用该命令可以确定有哪些进程正在运行和运行的状态、进程是否结束、进程有没有僵死、哪些进程占用了过多的资源等等,总之大部分信息都是可以通过执行该命令得到的。

  • 命令语法
    ps (选项)

  • 命令选项
    a:显示现行终端机下的所有程序,包括其他用户的程序。
    u:以用户为主的格式来显示系统状况。
    x:显示所有程序,包括历史进程。
    -e:显示所有进程(同 a)
    -f:显示 UID、PPIP、C 与 STIME 栏
    -l:显示进程详细信息


  • 查看当前系统的进程状态
[root@localhost ~]# ps aux
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.3 125100  3628 ?        Ss   10:28   0:01 /usr/lib/systemd/systemd 
root         2  0.0  0.0      0     0 ?        S    10:28   0:00 [kthreadd]
...............................

[root@localhost ~]# kill 2343    //杀死一个进程,语法为kill+PID

[root@localhost ~]# ps aux |grep nginx    //检查nginx是否运行
root      2619  0.0  0.0 112664   972 pts/0    R+   22:11   0:00 grep --color=auto nginx

说明: STAT 表示进程状态。

进程状态

D:不能中断的进程
S:sleep 状态的进程
s:主进程
T:暂停的进程
Z:僵尸进程
<:高优先级进程
N:低优先级进程
l:多线程进程
+:前台进程


  • 查看系统进程
[root@localhost ~]# ps -elf
F S UID        PID  PPID  C PRI  NI ADDR SZ WCHAN  STIME TTY          TIME CMD
4 S root         1     0  0  80   0 - 32023 ep_pol 20:57 ?        00:00:01 /usr/lib/systemd/systemd --switche
1 S root         2     0  0  80   0 -     0 kthrea 20:57 ?        00:00:00 [kthreadd]
1 S root         3     2  0  80   0 -     0 smpboo 20:57 ?        00:00:00 [ksoftirqd/0]
1 S root         7     2  0 -40   - -     0 smpboo 20:57 ?        00:00:00 [migration/0]

进程

进程 (Process) 是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。在早期面向进程设计的计算机结构中,进程是程序的基本执行实体; 在当代面向线程设计的计算机结构中,进程是线程的容器。程序是指令、数据及其组织形式的描述,进程是程序的实体。

运行中的进程可能具有以下三种基本状态:

  • 就绪状态(Ready):进程已获得除处理器外的所需资源,等待分配处理器资源;只要分配了处理器进程就可执行。就绪进程可以按多个优先级来划分队列。例如,当一个进程由于时间片用完而进入就绪状态时,排入低优先级队列;当进程由 I/O 操作完成而进入就绪状态时,排入高优先级队列。
  • 运行状态 (Running):进程占用处理器资源;处于此状态的进程的数目小于等于处理器的数目。在没有其他进程可以执行时 (如所有进程都在阻塞状态),通常会自动执行系统的空闲进程。
  • 阻塞状态 (Blocked):由于进程等待某种条件(如 I/O 操作或进程同步),在条件满足之前无法继续执行。该事件发生前即使把处理机分配给该进程,也无法运行。

线程

线程,有时被称为轻量级进程 (Lightweight
Process,LWP),是程序执行流的最小单元。一个标准的线程由线程 ID,当前指令指针 (PC),寄存器集合和堆栈组成。另外,线程是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥有一点儿在运行中必不可少的资源,但它可与同属一个进程的其它线程共享进程所拥有的全部资源。一个线程可以创建和撤消另一个线程,同一进程中的多个线程之间可以并发执行。由于线程之间的相互制约,致使线程在运行中呈现出间断性。线程也有就绪、阻塞和运行三种基本状态。每一个程序都至少有一个线程,若程序只有一个线程,那就是程序本身。
在单个程序中同时运行多个线程完成不同的工作,称为多线程。

线程的分类

  • 用户级线程:管理过程全部由用户程序完成,操作系统内核心只对进程进行管理。
  • 系统级线程(核心级线程):由操作系统内核进行管理。操作系统内核给应用程序提供相应的系统调用和应用程序接口 API,以使用户程序可以创建、执行、撤消线程。

进程和线程最大的区别:

  • 进程里包含了线程,线程是进程的子单元;
  • 同一个进程下的线程全部共享相同的内存,而进程之间内存相互隔离;