这个命令用到烂了,凑数吧👿
准备知识
Linux进程状态
- 运行(正在运行或在运行队列中等待)
- 中断(休眠中, 受阻, 在等待某个条件的形成或接受到信号)
- 不可中断(收到信号不唤醒和不可运行, 进程必须等待直到有中断发生)
- 僵死(进程已终止, 但进程描述符存在, 直到父进程调用wait4()系统调用后释放)
- 停止(进程收到SIGSTOP, SIGSTP, SIGTIN, SIGTOU信号后停止运行运行)
常用参数
- ps a 显示现行终端机下的所有程序,包括其他用户的程序。
- ps -A 显示所有进程。
- ps c 列出程序时,显示每个程序真正的指令名称,而不包含路径,参数或常驻服务的标示。
- ps -e 此参数的效果和指定”A”参数相同。
- ps e 列出程序时,显示每个程序所使用的环境变量。
- ps f 用ASCII字符显示树状结构,表达程序间的相互关系。
- ps -f 全格式
- ps -H 显示树状结构,表示程序间的相互关系。
- ps -N 显示所有的程序,除了执行ps指令终端机下的程序之外。
- ps s 采用程序信号的格式显示程序状况。
- ps S 列出程序时,包括已中断的子程序资料。
- ps -t<终端机编号> 指定终端机编号,并列出属于该终端机的程序的状况。
- ps u 以用户为主的格式来显示程序状况。
- ps x 显示所有程序,不以终端机来区分。
- ps l 较长、较详细的将该PID 的的信息列出;
常用输出列说明
1 | ps aux |
- USER:该 process 属于那个使用者账号的
- PID :该 process 的号码。
- %CPU:该 process 使用掉的 CPU 资源百分比;
- %MEM:该 process 所占用的物理内存百分比;
- VSZ :该 process 使用掉的虚拟内存量 (Kbytes)
- RSS :该 process 占用的固定的内存量 (Kbytes)
- TTY :该 process 是在那个终端机上面运作,若与终端机无关,则显示 ,另外, tty1-tty6 是本机上面的登入者程序,若为 pts/0 等等的,则表示为由网络连接进主机的程序。
- STAT:该程序目前的状态,主要的状态有:
- D //无法中断的休眠状态(通常 IO 的进程);
- R //正在运行可中在队列中可过行的;
- S //处于休眠状态;
- T //停止或被追踪;
- W //进入内存交换 (从内核2.6开始无效);
- X //死掉的进程 (基本很少见);
- Z //僵尸进程;
- < //优先级高的进程
- N //优先级较低的进程
- L //有些页被锁进内存;
- s //进程的领导者(在它之下有子进程);
- l //多线程,克隆线程(使用 CLONE_THREAD, 类似 NPTL pthreads);
- //位于后台的进程组;
- START:该 process 被触发启动的时间;
- TIME :该 process 实际使用 CPU 运作的时间。
- COMMAND:该程序的实际指令为何?
1 | ps l |
- F 代表这个程序的旗标 (flag), 4 代表使用者为 superuser;
- STAT 代表这个程序的状态;
- UID 代表执行者身份
- PID 进程的ID号!
- PPID 父进程的ID;
- PRI指进程的执行优先权(Priority的简写),其值越小越早被执行;
- NI 这个进程的nice值,其表示进程可被执行的优先级的修正数值。
- WCHAN 目前这个程序是否正在运作当中,若为 - 表示正在运作;
- TTY 登入者的终端机位置;
- TIME 使用掉的 CPU 时间。
- CMD 所下达的指令名称
常用例子
根据用户过滤进程
在需要查看特定用户进程的情况下,我们可以使用 -u 参数。比如我们要查看用户’sky’的进程,可以通过下面的命令:
1 | ps -u sky |
通过cpu和内存使用来过滤进程
也许你希望把结果按照 CPU 或者内存用量来筛选,这样你就找到哪个进程占用了你的资源。要做到这一点,我们可以使用 aux 参数,来显示全面的信息:
1 | ps -aux |
默认的结果集是未排好序的。可以通过 –sort命令来排序。
根据 CPU 使用来升序排序
1 | ps -aux --sort -pcpu |
根据 内存使用 来升序排序
1 | ps -aux --sort -pmem |
我们也可以将它们合并到一个命令
1 | ps -aux --sort -pcpu,+pmem |
通过进程的命令来查找进程
使用 -C 参数,后面跟你要找的进程的命令的名字。比如想显示一个名为docker-containerd的进程的信息,就可以使用下面的命令:
1 | ps -C docker-containerd |
如果想要看到更多的细节,我们可以使用-f参数来查看格式化的信息列表:
1 | ps -f -C docker-containerd |
树形显示进程
有时候我们希望以树形结构显示进程,可以使用 -axjf 参数。
1 | ps -axjf |
显示安全信息
如果想要查看现在有谁登入了你的服务器。可以使用ps命令加上相关参数:
1 | ps -eo pid,user,args |
参数 -e 显示所有进程信息,-o 参数控制输出。Pid,User 和 Args参数显示PID,运行应用的用户和该应用的命令行参数。
能够与-e 参数 一起使用的关键字是args, cmd, comm, command, fname, ucmd, ucomm, lstart, bsdstart 和 start。
格式化输出root用户(真实的或有效的UID)创建的进程
系统管理员想要查看由root用户运行的进程和这个进程的其他相关信息时,可以通过下面的命令:
1 | ps -U root -u root u |
-U 参数按真实用户ID(RUID)筛选进程,它会从用户列表中选择真实用户名或 ID。真实用户即实际创建该进程的用户。
-u 参数用来筛选有效用户ID(EUID)。
最后的u参数用来决定以针对用户的格式输出,由User, PID, %CPU, %MEM, VSZ, RSS, TTY, STAT, START, TIME 和 COMMAND这几列组成。
参考
http://yanue.net/post-87.html
https://www.cnblogs.com/wxgblogs/p/6591980.html
https://linux.cn/article-4743-1.html