乐趣区

关于linux:这才是使用ps命令的正确姿势

这才是应用 ps 命令的正确姿态

前言

在 linux 零碎当中咱们通常会应用命令去查看一些零碎的过程信息,咱们最常应用的就是 ps (process status)。ps 命令次要是用于查看以后正在运行的程序,以及他们相干的的信息,咱们能够通过不同的选项进行查看。ps 给咱们提供了十分多的选项,这些选项经常令人分辨不分明,本篇文章咱们认真谈一谈 ps 输入具体的含意。

ps 命令详解

只输入跟以后 shell 无关的过程

当咱们在命令行当中间接输出 ps 命令,那么就只可能看到在以后终端当中启动的过程,即便同一个用户启动其余的终端,在这个终端当中也不能看到同一个用户在其余终端启动的过程,如下图所示:

分割线示意高低有两个终端:

  • 咱们在上一个终端后盾启动一个 sleep.out 的程序,咱们就可能在下面的终端外面看到咱们刚刚启动的程序。
  • 然而咱们在上面同一个用户的不同终端就不可能看到在下面一个终端启动的程序。

ps 命令输入的含意:

  • PID:过程的过程号,有唯一性。
  • TTY:用户登陆的时候应用的虚构终端。
  • TIME:程序应用的 CPU 工夫总和。
  • CMD:过程启动的时候执行的命令。

输入所有的过程

ps -A
ps -e

下面的两个命令输入零碎当中所有的过程信息,咱们能够应用这个命令统计零碎当中一个有多少过程:

输入所有过程然而排除终端和 session leader

ps -a

下面的命令输入除了 session leader 和跟终端无关的所有过程。

  • 跟终端无关的过程很好了解,就是跟终端脱离关系,个别是零碎过程和用户的守护过程。
  • 而 session leader 就是你登陆终端时候的那个过程,如下图所示:

一个更具体的形容一个 shell 中 session leader 和其余过程的关系如下图所示(图中最左方就是 session leader 过程):

查看正在运行的程序

ps -r

查看以后用户的过程

ps -x

查看具体某个过程的信息

ps -p pid

输入内容携带用户名

ps -u

查看所有与以后终端无关的过程

这个命令和间接输出 ps 执行的成果一样

ps -T

一个咱们十分相熟的命令

咱们在 linux 操作系统上面咱们通常应用 ps 命令的时候,咱们会应用如下两个命令:

ps aux # ax 通常要在一起应用 一起应用时候的成果和 -e 或者 -A 是一样的
ps -ef

其实在很多状况下咱们只想查看与咱们本人无关的程序,而下面的两个命令还查看了很多其余用户的过程,因而咱们能够批改一下下面两个命令:

ps xu

下面这个命令只会输入与咱们本人无关的程序同时输入的内容还算残缺。

指定 ps 命令输入的内容

在后面的命令当中咱们都没有定制化的输入过一些内容,都是 ps 命令想输入啥就输入啥!其实咱们能够指定 ps 命令只输入咱们须要的内容,比方上面的命令输入过程 id,父过程 id,以及程序执行时候输出的命令:

ps -o pid,ppid,command
➜  pthreads ps -o pid,ppid,command
    PID    PPID COMMAND
2782266   34624 /usr/bin/zsh
2825942 2782266 ps -o pid,ppid,command

- o 示意指定咱们想要输入的内容,在下面的命令当中:

  • pid: 示意以后过程的过程号。
  • ppid: 示意以后过程父过程的过程号。
  • command: 示意执行这个命令的时候输出的命令。

还有很多其余的能够输入的内容,在下表当中列出一些常常应用的条目:

条目 含意
pid 过程号
ppid 父过程过程号
command 执行命令
%cpu 过程对于 cpu 的使用率
%mem 内存占有率
comm 更加简洁的命令和 command 统一
cputime 过程累计应用的 CPU 工夫
etime 过程开始执行到当初一共过了多长时间
stat 过程的状态
ni 过程的优先级
user 用户名

这里咱们在重点谈一下过程的状态 stat,咱们看一个他的输入:

➜  pthreads ps -o pid,ppid,stat,command
    PID    PPID STAT COMMAND
2782266   34624 Ss   /usr/bin/zsh
2832729 2782266 SN   ./sleep.out
2832740 2782266 R+   ps -o pid,ppid,stat,command

在下面当中 STAT 那一列就是示意过程的状态,咱们当初仔细分析一下下面字母示意的含意:

STAT 当中字母的含意表:

条目 含意
D 示意不可能被中断的睡眠操作,比如说 IO 操作
I 内核当中的闲暇线程
R 正在执行或者处于就绪队列当中的过程
S 能够被中断的睡眠,个别是期待某个事件触发
T 被其余的过程发送的信号给停下来了
t 被调试或者 tracing 中
Z 示意这个过程是一个僵尸过程
< 示意高优先级
N 示意低优先级
L 有页面被所在内存当中,也就是说这个页面不会被操作系统换出道对换区当中
s 示意这个过程是一个 session leader
l 是一个多线程程序
+ 示意在前台过程组当中

当初依据下面表格当中的内容咱们能够晓得:

  • 过程 2782266 正在期待某个事件触发,而且这个过程是 session leader。
  • 过程 2832729 也是在期待某个事件触发,而且是低优先级的过程。
  • 过程 2832740 正在执行。

下图示意 linux 当中过程的几种状态:

咱们在来看一个多过程程序的例子:


#include <stdio.h>
#include <unistd.h>
#include <pthread.h>

void* func(void* args) {while (1)
  {/* code */}
  
}
int main() {for(int i = 0; i < 10; i++) {
    pthread_t tid;
    pthread_create(&tid, NULL, func, NULL);
  }
  while (1)
  {sleep(1);
  }
  
  return 0;
}

下面的程序执行实现之后,ps 的输入后果如下:

➜  pthreads ps -o pid,ppid,stat,command
    PID    PPID STAT COMMAND
2782266   34624 Ss   /usr/bin/zsh
2840012 2782266 SNl  ./sleep.out # 这个过程就是下面那个程序示意的过程
2840037 2782266 R+   ps -o pid,ppid,stat,command

咱们能够看到这个过程的 STAT 当中还有一个 l 示意这是一个多过程的程序。

总结

在本篇文章当中次要给大家介绍了一些常见的 ps 命令的应用办法,以及一些罕用的输入,还有就是输入内容中比拟重要的过程状态,可能很好的帮忙咱们实时去理解过程。


以上就是本篇文章的所有内容了,我是 LeHung,咱们下期再见!!!更多精彩内容合集可拜访我的项目:https://github.com/Chang-LeHu…

关注公众号: 一无是处的钻研僧 ,理解更多计算机(Java、Python、计算机系统根底、算法与数据结构)常识。

退出移动版