这才是使用ps命令的正确姿势

这才是使用ps命令的正确姿势前言在linux系统当中我们通常会使用命令去查看一些系统的进程信息,我们最常使用的就是 ps (process status) 。ps 命令主要是用于查看当前正在运行的程序 , 以及他们相关的的信息,我们可以通过不同的选项进行查看 。ps 给我们提供了非常多的选项 , 这些选项常常令人分辨不清楚 , 本篇文章我们仔细谈一谈 ps 输出具体的含义 。
ps命令详解只输出跟当前shell有关的进程当我们在命令行当中直接输入 ps 命令 , 那么就只能够看到在当前终端当中启动的进程,即使同一个用户启动其他的终端,在这个终端当中也不能看到同一个用户在其他终端启动的进程,如下图所示:

这才是使用ps命令的正确姿势

文章插图
分割线表示上下有两个终端:
  • 我们在上一个终端后台启动一个 sleep.out 的程序,我们就能够在上面的终端里面看到我们刚刚启动的程序 。
  • 但是我们在下面同一个用户的不同终端就不能够看到在上面一个终端启动的程序 。
ps 命令输出的含义:
  • PID:进程的进程号,有唯一性 。
  • TTY:用户登陆的时候使用的虚拟终端 。
  • TIME:程序使用的CPU时间总和 。
  • CMD:进程启动的时候执行的命令 。
输出所有的进程ps -Aps -e上面的两个命令输出系统当中所有的进程信息,我们可以使用这个命令统计系统当中一个有多少进程:
这才是使用ps命令的正确姿势

文章插图
输出所有进程但是排除终端和session leaderps -a上面的命令输出除了 session leader 和跟终端无关的所有进程 。
  • 跟终端无关的进程很好理解,就是跟终端脱离关系,一般是系统进程和用户的守护进程 。
  • 而 session leader 就是你登陆终端时候的那个进程 , 如下图所示:
    这才是使用ps命令的正确姿势

    文章插图
一个更具体的描述一个 shell 中 session leader 和其他进程的关系如下图所示(图中最左方就是 session leader 进程):
这才是使用ps命令的正确姿势

文章插图
查看正在运行的程序ps -r查看当前用户的进程ps -x查看具体某个进程的信息ps -p pid
这才是使用ps命令的正确姿势

文章插图
输出内容携带用户名【这才是使用ps命令的正确姿势】ps -u查看所有与当前终端有关的进程这个命令和直接输入ps执行的效果一样
ps -T一个我们非常熟悉的命令我们在linux操作系统下面我们通常使用 ps 命令的时候,我们会使用如下两个命令:
ps aux # ax 通常要在一起使用 一起使用时候的效果和 -e 或者 -A 是一样的ps -ef其实在很多情况下我们只想查看与我们自己有关的程序 , 而上面的两个命令还查看了很多其他用户的进程,因此我们可以修改一下上面两个命令:
ps xu上面这个命令只会输出与我们自己有关的程序同时输出的内容还算完整 。
这才是使用ps命令的正确姿势

文章插图
指定ps命令输出的内容在前面的命令当中我们都没有定制化的输出过一些内容,都是ps命令想输出啥就输出啥!其实我们可以指定ps命令只输出我们需要的内容,比如下面的命令输出进程id,父进程id,以及程序执行时候输入的命令:
ps -o pid,ppid,command?  pthreads ps -o pid,ppid,command    PID    PPID COMMAND2782266   34624 /usr/bin/zsh2825942 2782266 ps -o pid,ppid,command-o表示指定我们想要输出的内容 , 在上面的命令当中:
  • pid: 表示当前进程的进程号 。
  • ppid: 表示当前进程父进程的进程号 。
  • command: 表示执行这个命令的时候输入的命令 。
还有很多其他的可以输出的内容,在下表当中列出一些经常使用的条目:
条目含义pid进程号ppid父进程进程号command执行命令%cpu进程对于cpu的使用率%mem内存占有率comm更加简洁的命令和command一致cputime进程累计使用的CPU时间etime进程开始执行到现在一共过了多长时间stat进程的状态ni进程的优先级user用户名

推荐阅读