命令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,以使用户程序可以创建、执行、撤消线程。
进程和线程最大的区别:
- 进程里包含了线程,线程是进程的子单元;
- 同一个进程下的线程全部共享相同的内存,而进程之间内存相互隔离;