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

news2025/1/10 11:37:33

这才是使用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-LeHung/CSCore

关注公众号:一无是处的研究僧,了解更多计算机(Java、Python、计算机系统基础、算法与数据结构)知识。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/652.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

全球名校AI课程库(12)| CMU卡内基梅隆 · 数据库系统进阶课程『Advanced Database Systems』

&#x1f3c6; 课程学习中心 | &#x1f6a7; 计算机基础课程合辑 | &#x1f30d; 课程主页 | &#x1f4fa; 中英字幕视频 | &#x1f680; 项目代码解析 课程介绍 CMU 15-721 是 CMU 卡内基梅隆大学开放的数据库方向进阶课程&#xff0c;讨论了很多数据库方向新的技术研究方…

基于Matlab使用跟踪筛选器跟踪机动目标仿真(附源码)

此示例演示如何使用各种跟踪筛选器跟踪机动目标。该示例显示了使用单个运动模型和多个运动模型的滤镜之间的差异。 一、定义方案 在此示例中&#xff0c;定义了一个目标&#xff0c;该目标最初以 200 m/s 的恒定速度行进 33 秒&#xff0c;然后输入 10 度/秒的恒定转弯。转弯…

【C++】类和对象(中)

类和对象是面向对象语言的一个重要部分&#xff0c;承接上一话&#xff0c;我们直接开始这一章的内容。 文章目录 一、类的6个默认成员函数二、构造函数三、析构函数四、拷贝构造函数五、赋值操作符重载六、 const成员函数七、取地址及const取地址操作符重载八、相关习题的练习…

Windows系统常用网络命令详解及命令示例(全)

1.最基本也是最常用的&#xff0c;PING ping 192.168.0.8 -t 测试物理网络   &#xff0c;参数-t是等待用户中断测试   2.检查DNS、IP、Mac等   A. Win98&#xff1a;winipcfg   B.Win2000及以上&#xff1a;ipconfig /all      C.NSLOOKUP&#xff1a;如果查看河北…

初阶c语言之浅识指针

学习导航:> 1.指针是什么&#xff1f; 2.指针和指针类型 2.1指针-整数 2.2指针的解引用 3.野指针 3.1野指针成因 3.2如何规避野指针 4.指针运算 4.1指针-整数 4.2指针-指针 4.3指针的关系运算 5.指针和数组 6.二级指针 7.指针数组 1.指针是什么&#xff1f; 指…

动态路由协议解析(rip)

因为今天是1024程序猿节&#xff0c;小刘就在这里祝各位程序猿大佬们节日快乐啦 作者介绍&#xff1a; &#x1f4b0;作者&#xff1a;小刘在C站 ✨每天分享课堂笔记 &#x1f338;夕阳下&#xff0c;是最美的绽放 目录 动态路由协议和 rip 1.动态路由 2.动态路由协议工作…

非线性方程求根——牛顿迭代法

一、牛顿法 1.实质&#xff1a;牛顿法实质上是一种线性方法&#xff0c;其基本思想是将非线性方程f(x)0逐步归结为某种线性方程来解。 2.牛顿法公式&#xff1a; 已知方程f(x)0有近似解xk,假设&#xff0c;将f(x)在点xk泰勒展开&#xff0c;有则方程f(x)0可近似表示为&#…

【开关电源六】buck电路的输出纹波定量分析走一波?

在TI官网发现一篇关于降压开关电源的输出纹波定量分析&#xff0c;看完觉得挺不错的&#xff0c;于是大概整理翻译了一下分享出来。以往我们分析开关电源的一次纹波都是定性分析&#xff0c;知道输出电压纹波和电感纹波电流、输出滤波电容ESR等有关&#xff0c;今天我们用数学、…

再看 Logback 源码

三大组件 Logback 构建在三个主要的类上&#xff1a;Logger&#xff0c;Appender 和 Layouts。这三个不同类型的组件一起作用能够让开发者根据消息的类型以及日志的级别来打印日志。 Logger 类作为 logback-classic 模块的一部分。Appender 与 Layouts 接口作为 logback-core 的…

VapSR

1024刚过还得搬砖 注意机制在设计高级超分辨率&#xff08;SR&#xff09;网络中起着关键作用。在这项工作中&#xff0c;作者们通过改进注意机制设计了一个高效的SR网络。VapSR以更少的参数优于当前的轻量级网络。董超团队开源超大感受野注意力超分方案 paper&#xff1a;ht…

【数据挖掘 | 可视化】 WordCloud 词云(附详细代码案例)

&#x1f935;‍♂️ 个人主页: 计算机魔术师 &#x1f468;‍&#x1f4bb; 作者简介&#xff1a;CSDN内容合伙人&#xff0c;全栈领域优质创作者。 开发环境 编辑器&#xff1a; jupyter notebook 解释器&#xff1a; python 3.7在七夕节中&#xff0c;博主写了一篇为女友收集…

自学Vue之路——Vue介绍及基本语法

今日内容概要 前端发展介绍Vue的快速使用插值语法指令系统之文本指令指令系统之事件指令指令系统之属性指令 前端发展介绍 HTML(5)、CSS(3)、JavaScript(ES5、ES6、ES13)&#xff1a;编写一个个的页面 -> 给后端(PHP、Python、Go、Java) -> 后端嵌入模板语法 -> 后端…

Arduino基础知识

目录&#xff1a; 第1章 概述 1.1 Arduino简介 1.2 Arduino内部结构 第2章 Arduino编程 2.1 Arduino开发环境 2.2 Arduino语言概述 2.3 Arduino基本函数 第3章 Arduino通信教程 3.1 SPI通信 3.2 红外通信 3.3 WiFi通信 3.4 蓝牙通信 第4章 Arduino实验 1、接收串…

【学生管理系统】权限管理之用户管理—查询所有用户并关联相关角色

目录 一、查询所有用户&#xff08;关联角色&#xff09; 1&#xff09;后端 2&#xff09;前端 &#x1f49f; 创作不易&#xff0c;不妨点赞&#x1f49a;评论❤️收藏&#x1f499;一下 一、查询所有用户&#xff08;关联角色&#xff09; 1&#xff09;后端 修改javaB…

牛客小题练手 | 二叉树(三)

&#x1f308;刷题&#xff0c;面试&#xff0c;求职&#xff0c;快来牛客网一起成为offer收割机&#xff01; 点击注册收割offer 一、BM32 合并二叉树 描述 已知两颗二叉树&#xff0c;将它们合并成一颗二叉树。合并规则是&#xff1a;都存在的结点&#xff0c;就将结点值加…

前端无法渲染CSS文件

&#x1f680; 优质资源分享 &#x1f680; 学习路线指引&#xff08;点击解锁&#xff09;知识定位人群定位&#x1f9e1; Python实战微信订餐小程序 &#x1f9e1;进阶级本课程是python flask微信小程序的完美结合&#xff0c;从项目搭建到腾讯云部署上线&#xff0c;打造一…

Air780E模块PPP应用开发指南

目录PPP拨号windows下PPP拨号配置标准调制解调器设置拨号连接验证拨号结果linux下PPP拨号1.安装 PPP 拨号软件2.创建拨号脚本文件/etc/ppp/peers/air-ppp/etc/ppp/peers/air-chat-connect/etc/ppp/peers/air-chat-disconnect3.创建好以上三个文件后就可以通过pppd拨号了4.拨号成…

机械转码日记【21】list使用及list的模拟实现

目录 前言 1.list的使用 1.2sort和unique 2.list的模拟 2.1构造函数 2.2push_back() 2.3迭代器 2.3.1简洁版 2.3.2升级版&#xff08;重要&#xff09; 2.4insert和erase与迭代器失效 2.4.1list的迭代器失效 2.5析构函数 2.6深拷贝构造 前言 list是我们数据结构…

Web前端 | JavaScript(DOM编程)

✅作者简介&#xff1a;一位材料转码农的选手&#xff0c;希望一起努力&#xff0c;一起进步&#xff01; &#x1f4c3;个人主页&#xff1a;每天都要敲代码的个人主页 &#x1f525;系列专栏&#xff1a;Web前端 &#x1f4ac;推荐一款模拟面试、刷题神器&#xff0c;从基础到…

Qt文档阅读笔记-Hello Speak Example

官方的这个例子比较有意思&#xff0c;在此记录下&#xff0c;方便以后查阅。 Hello Speak Example 这个例子主要是使用QTextToSpeech类将用户自定义输入的文本转换为口语&#xff0c;包括高低音、声音大小、读速。并且能够选择语言和声音。 包含的文件如下&#xff1a; 本篇博…