Linux之ps命令

入门小站 -
Linux之ps命令
Linux中的ps命令是Process Status的缩写。ps命令用来列出系统中当前运行的那些进程。ps命令列出的是当前那些进程的快照,就是执行ps命令的那个时刻的那些进程,如果想要动态的显示进程信息,就可以使用top命令。

要对进程进行监测和控制,首先必须要了解当前进程的情况,也就是需要查看当前进程,而 ps 命令就是最基本同时也是非常强大的进程查看命令。使用该命令可以确定有哪些进程正在运行和运行的状态、进程是否结束、进程有没有僵死、哪些进程占用了过多的资源等等。总之大部分信息都是可以通过执行该命令得到的。

ps 为我们提供了进程的一次性的查看,它所提供的查看结果并不动态连续的;如果想对进程时间监控,应该用 top 工具。

kill 命令用于杀死进程。

Linux中进程有5种状态运行(正在运行或在运行队列中等待)中断(休眠中, 受阻, 在等待某个条件的形成或接受到信号)不可中断(收到信号不唤醒和不可运行, 进程必须等待直到有中断发生)僵死(进程已终止, 但进程描述符存在, 直到父进程调用wait4()系统调用后释放)停止(进程收到SIGSTOP, SIGSTP, SIGTIN, SIGTOU信号后停止运行运行)ps工具标识进程的5种状态码D 不可中断 uninterruptible sleep (usually IO)R 运行 runnable (on run queue)S 中断 sleepingT 停止 traced or stoppedZ 僵死 a defunct (”zombie”) process命令语法

ps (参数)

命令参数-a:显示所有终端机下执行的程序,除了阶段作业领导者之外。a:显示现行终端机下的所有程序,包括其他用户的程序。-A:显示所有程序。-c:显示CLS和PRI栏位。c:列出程序时,显示每个程序真正的指令名称,而不包含路径,选项或常驻服务的标示。-C<指令名称>:指定执行指令的名称,并列出该指令的程序的状况。-d:显示所有程序,但不包括阶段作业领导者的程序。-e:此选项的效果和指定"A"选项相同。e:列出程序时,显示每个程序所使用的环境变量。-f:显示UID,PPIP,C与STIME栏位。f:用ASCII字符显示树状结构,表达程序间的相互关系。-g<群组名称>:此选项的效果和指定"-G"选项相同,当亦能使用阶段作业领导者的名称来指定。g:显示现行终端机下的所有程序,包括群组领导者的程序。-G<群组识别码>:列出属于该群组的程序的状况,也可使用群组名称来指定。h:不显示标题列。-H:显示树状结构,表示程序间的相互关系。-j或j:采用工作控制的格式显示程序状况。-l或l:采用详细的格式来显示程序状况。L:列出栏位的相关信息。-m或m:显示所有的执行绪。n:以数字来表示USER和WCHAN栏位。-N:显示所有的程序,除了执行ps指令终端机下的程序之外。-p<程序识别码>:指定程序识别码,并列出该程序的状况。p<程序识别码>:此选项的效果和指定"-p"选项相同,只在列表格式方面稍有差异。r:只列出现行终端机正在执行中的程序。-s<阶段作业>:指定阶段作业的程序识别码,并列出隶属该阶段作业的程序的状况。s:采用程序信号的格式显示程序状况。S:列出程序时,包括已中断的子程序资料。-t<终端机编号>:指定终端机编号,并列出属于该终端机的程序的状况。t<终端机编号>:此选项的效果和指定"-t"选项相同,只在列表格式方面稍有差异。-T:显示现行终端机下的所有程序。-u<用户识别码>:此选项的效果和指定"-U"选项相同。u:以用户为主的格式来显示程序状况。-U<用户识别码>:列出属于该用户的程序的状况,也可使用用户名称来指定。U<用户名称>:列出属于该用户的程序的状况。v:采用虚拟内存的格式显示程序状况。-V或V:显示版本信息。-w或w:采用宽阔的格式来显示程序状况。 x:显示所有程序,不以终端机来区分。X:采用旧式的Linux i386登陆格式显示程序状况。-y:配合选项"-l"使用时,不显示F(flag)栏位,并以RSS栏位取代ADDR栏位 。-<程序识别码>:此选项的效果和指定"p"选项相同。--cols<每列字符数>:设置每列的最大字符数。--columns<每列字符数>:此选项的效果和指定"--cols"选项相同。--cumulative:此选项的效果和指定"S"选项相同。--deselect:此选项的效果和指定"-N"选项相同。--forest:此选项的效果和指定"f"选项相同。--headers:重复显示标题列。--help:在线帮助。--info:显示排错信息。--lines<显示列数>:设置显示画面的列数。--no-headers:此选项的效果和指定"h"选项相同,只在列表格式方面稍有差异。--group<群组名称>:此选项的效果和指定"-G"选项相同。--Group<群组识别码>:此选项的效果和指定"-G"选项相同。--pid<程序识别码>:此选项的效果和指定"-p"选项相同。--rows<显示列数>:此选项的效果和指定"--lines"选项相同。--sid<阶段作业>:此选项的效果和指定"-s"选项相同。--tty<终端机编号>:此选项的效果和指定"-t"选项相同。--user<用户名称>:此选项的效果和指定"-U"选项相同。--User<用户识别码>:此选项的效果和指定"-U"选项相同。--version:此选项的效果和指定"-V"选项相同。--widty<每列字符数>:此选项的效果和指定"-cols"选项相同。显示所有进程信息
> ps -A
  PID TTY          TIME CMD
    1 ?        00:11:10 systemd
    2 ?        00:00:04 kthreadd
    4 ?        00:00:00 kworker/0:0H
    6 ?        00:00:07 ksoftirqd/0
    7 ?        00:00:02 migration/0
    8 ?        00:00:00 rcu_bh
    9 ?        00:43:24 rcu_sched
   10 ?        00:00:00 lru-add-drain
   11 ?        00:00:12 watchdog/0
   12 ?        00:00:10 watchdog/1
   13 ?        00:00:11 migration/1
   14 ?        00:06:22 ksoftirqd/1
   16 ?        00:00:00 kworker/1:0H
   17 ?        00:00:11 watchdog/2
   ...
显示指定用户启动的线程
> ps -u deploy
  PID TTY          TIME CMD
 7698 ?        00:29:50 java
13783 ?        00:16:42 java
30027 ?        00:03:20 java
显示所有进程信息和命令行
> ps -ef 
UID        PID  PPID  C STIME TTY          TIME CMD
root         1     0  0 Jan08 ?        00:11:10 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
root         2     0  0 Jan08 ?        00:00:04 [kthreadd]
root         4     2  0 Jan08 ?        00:00:00 [kworker/0:0H]
root         6     2  0 Jan08 ?        00:00:07 [ksoftirqd/0]
root         7     2  0 Jan08 ?        00:00:02 [migration/0]
ps与grep常用组合用法,查找特定进程
> ps -ef | grep java
ps -ef | grep ssh
root      1394     1  0 Jan08 ?        00:04:23 /usr/sbin/sshd -D
root     30899  1394  0 22:44 ?        00:00:00 sshd: root@pts/2
root     30922 30899  0 22:44 ?        00:00:00 /usr/libexec/openssh/sftp-server
root     31625  1394  0 22:49 ?        00:00:00 sshd: root [priv]
sshd     31627 31625  0 22:49 ?        00:00:00 sshd: root [net]
root     31804 30905  0 22:50 pts/2    00:00:00 grep --color=auto ssh
将目前属于您自己这次登入的PID与相关信息列示出来
> ps -l
F S   UID   PID  PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
0 R     0  1275 30905  0  80   0 - 38304 -      pts/2    00:00:00 ps
4 S     0 30905 30899  0  80   0 - 28895 do_wai pts/2    00:00:00 bash
F 代表这个程序的旗标 (flag), 4 代表使用者为 super userS 代表这个程序的状态 (STAT),关于各 STAT 的意义将在内文介绍UID 程序被该 UID 所拥有PID 就是这个程序的 ID !PPID 则是其上级父程序的IDC CPU 使用的资源百分比PRI 这个是 Priority (优先执行序) 的缩写,详细后面介绍NI 这个是 Nice 值,在下一小节我们会持续介绍ADDR 这个是 kernel function,指出该程序在内存的那个部分。如果是个 running的程序,一般就是 "-"SZ 使用掉的内存大小WCHAN 目前这个程序是否正在运作当中,若为 - 表示正在运作TTY 登入者的终端机位置TIME 使用掉的 CPU 时间。CMD 所下达的指令为何列出类似程序树的程序显示
> ps -axjf
    1  1394  1394  1394 ?           -1 Ss       0   4:23 /usr/sbin/sshd -D
 1394 30899 30899 30899 ?           -1 Ss       0   0:00  \_ sshd: root@pts/2
30905  1873  1872 30905 pts/2     1872 S+       0   0:00      |   \_ grep --color=auto ssh
30899 30922 30922 30922 ?           -1 Ss       0   0:00      \_ /usr/libexec/openssh/sftp-server
分页查看进程信息
> ps aux | more
每一列的解释
> ps aux | more
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
USER 进程的用户;PID 进程的ID;%CPU 进程占用的CPU百分比;%MEM 占用内存的百分比;VSZ 该进程使用的虚拟内存量(KB);RSS 该进程占用的固定内存量(KB);TTY 该进程在哪个终端上运行(登陆者的终端位置),若与终端无关,则显示(?)。若为pts/0等,则表示由网络连接主机进程;START 该进程被触发启动时间;TIME 该进程实际使用CPU运行的时间;COMMAND 命令的名称和参数;STAT状态位常见的状态字符D 无法中断的休眠状态(通常 IO 的进程);R 正在运行可中在队列中可过行的;S 处于休眠状态;T 停止或被追踪;W 进入内存交换 (从内核2.6开始无效);X 死掉的进程 (基本很少见);Z 僵尸进程;< 优先级高的进程;N 优先级较低的进程;L 有些页被锁进内存;s 进程的领导者(在它之下有子进程);l 多进程的(使用 CLONE_THREAD, 类似 NPTL pthreads);位于后台的进程组;把所有的进程信息输入到rumenz.txt文件
> ps aux > rumenz.txt
输出指定的字段
> ps -o pid,ppid,pgrp,session,tpgid,comm
 PID  PPID  PGRP  SESS TPGID COMMAND
 2292 30905  2292 30905  2292 ps
30905 30899 30905 30905  2292 bash
ps auxps –aux的区别请注意ps -aux不同于ps aux。POSIX和UNIX的标准要求ps -aux打印用户名为x的用户的所有进程,以及打印所有将由-a选项选择的过程。如果用户名为x不存在,ps的将会解释为ps aux,而且会打印一个警告。这种行为是为了帮助转换旧脚本和习惯。它是脆弱的,即将更改,因此不应依赖。ps auxps -ef两者的输出结果差别不大,但展示风格不同。auxBSD风格,-efSystem V风格。这是次要的区别,一个影响使用的区别是aux会截断command列,而-ef不会。当结合grep时这种区别会影响到结果。

原文链接:https://rumenz.com/rumenbiji/...
微信公众号:入门小站

特别申明:本文内容来源网络,版权归原作者所有,如有侵权请立即与我们联系(cy198701067573@163.com),我们将及时处理。

Tags 标签

linux

扩展阅读

加个好友,技术交流

1628738909466805.jpg