简介
Linux中的ps命令是Process Status的缩写。ps命令用来列出系统中当前运行的进程和进程号(process identification numbers,PIDs)。
ps命令列出的是当前那些进程的快照,就是执行ps命令的那个时刻的那些进程,如果想要动态的显示进程信息,就可以使用top命令。
一个进程,或者说一个任务,是一个程序的执行实例。每一个进程会被分配一个唯一的进程号。
用法
最基本的用法为:
1 | ps [options] |
当不加选项只执行ps命令时。ps输出如下四种信息:
1 | PID | TTY | TIME | CMD |
然后至少会输出shell和ps的状态。shell作为unix-like系统中传统的文字型交互界面,在linux系统中默认会使用bash(此外还有zsh等等)。ps自身则会在指令打印完后结束。
四个输出中。PID为编号已经解释过了。TIME显示的是进程已经运行的CPU时间,CMD是启动该进程时执行的命令。TTY目前表示进程是在那个终端机上面运作(之前是电传打字机teletype的缩写),若与终端机无关,则显示 ?,另外, tty1-tty6 是本机上面的登入者程序,若为 pts/0 等等的,则表示为由网络连接进主机的程序。
主要选项与示例
1 | -a 显示所有用户的全部进程,除非使用-x选项,则会跳过没有控制终端的进程(SystemV风格) |
主要使用BSD风格输出为:
1 | ps aux |
-a
参数可以输出全部用户的全部进程。-u
参数输出详细进程信息。-x
指令可输出没有控制终端的进程(如开机启动进程或后台等待激活中的进程)
除了前面介绍的参数, VSZ (virtual size in kilobytes), RSS (real memory size or resident set size in 1024 byte units), STAT (the process state code),开始时间, 持续时间等信息都会有。
如果使用SystemV风格则为
1 | ps -ef |
-e
会输出全部进程,-f
则会生成一个简短的状态,使用-l
则会显示更长的内容
1 | ps -efl |
命令会生成一个15列的表格,其中长度太大的会自动省略对齐(如果不用grep这个会比较适合)。
结束进程可以使用:
1 | kill 11253 |
强制结束可用:
1 | kill -9 11253 |
全部命令
1 | -A 显示所有终端的所有进程 |
附录
附录1:Linux进程的ID
- Process ID (PID)
一个用来表示进程的唯一的数,进程被杀死后可释放用于其他进程 - Parent Process ID (PPID)
启动这个进程的母进程的PID - Process Group ID (PGID)
进程组领导进程的PID,如果PID == PGID则该进程是进程组领导进程。 - Session ID (SID)
多个进程组可以构成一个会话。SID是会话的领导进程的PID,如果PID == SID则该进程是会话的领导进程。(这个主要是在当年那个时代在一个终端建立一个会话对应多个进程组,可以选取一个进程组作为前台接收指令,其他在后台运行)1
2
3+-----------+ +-----------+ +-----------+
| Session +--------> Pro Group +-------> Process |
+-----------+ +-----------+ +-----------+
附录2:Linux进程的状态
程序状态包括:
- D, uninterruptable sleep;
- N, low priority;
- R, runnable (on run queue);
- S, sleeping;
- T, traced or stopped;
- Z, defunct (zombie).