这才是使用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-LeHung/CSCore
关注公众号:一无是处的研究僧,了解更多计算机(Java、Python、计算机系统基础、算法与数据结构)知识。
这才是使用ps命令的正确姿势的更多相关文章
- Spring Boot 2实现分布式锁——这才是实现分布式锁的正确姿势!
参考资料 网址 Spring Boot 2实现分布式锁--这才是实现分布式锁的正确姿势! http://www.spring4all.com/article/6892
- 这才是Tomcat内存配置的正确姿势
1.背景 虽然阅读了各大牛的博客或文章,但并没有找到特别全面的关于JVM内存分配方法的文章,很多都是复制黏贴 为了严谨,本文特别备注只介绍基于HotSpot VM虚拟机,并且基于JDK1.7的内存分配 ...
- ps命令详解(转)
原文地址:http://apps.hi.baidu.com/share/detail/32573968 有时候系统管理员可能只关心现在系统中运行着哪些程序,而不想知道有哪些进程在运行.由于一个应用程序 ...
- ps 命令详解
有时候系统管理员可能只关心现在系统中运行着哪些程序,而不想知道有哪些进程在运行.由于一个应用程序可能需要启动多个进程.所以在同等情况下,进程的数 量要比程序多的多.为此从阅读方面考虑,管理员需要知道系 ...
- linux命令之ps命令
1.管道 linux命令管道通过|表示.一般在linux命令中|(管道)之前的命令会输出大量的结果,|(管道)之后的命令一般就是带有条件的,只将|前满足条件的结果显示出来. 2.grep命令 grep ...
- linux 命令——PS命令
首先要明白什么是进程进程是一个正在运行的程序.也就是说在Linux系统上运行的所有东西都是进程.和进程相比较,作业是一系列按一定顺序执行的命令.一条简单的命令可能会涉及多个进程,尤其是当使用管道和重定 ...
- ps 命令的详细功能解析
转自:http://www.cnblogs.com/wangkangluo1/archive/2011/09/23/2185938.html 要对进程进行监测和控制,首先必须要了解当前进程的情况,也就 ...
- [转]ps命令详解
原文地址:http://apps.hi.baidu.com/share/detail/32573968 转载自:http://www.cnblogs.com/wangkangluo1/archive/ ...
- linux每日命令(34):ps命令和pstree命令
Linux中的ps命令是Process Status的缩写.ps命令用来列出系统中当前运行的那些进程.ps命令列出的是当前那些进程的快照,就是执行ps命令的那个时刻的那些进程,如果想要动态的显示进程信 ...
随机推荐
- Web 前端模块出现的原因,以及 Node.js 中的模块
模块出现原因 简单概述 随着 Web 2.0 时代的到来,JavaScript 不再是以前的小脚本程序了,它在前端担任了更多的职责,也逐渐地被广泛运用在了更加复杂的应用开发的级别上. 但是 JavaS ...
- 【Django】DRF开发中的一些技巧记录
问题记录 问题1:信号没有按预期触发 描述 编写了信号函数后,并没有如预期一般在必要时候触发,函数如下: @receiver(signals.post_save, sender=Prometheus) ...
- (WebFlux)003、多数据源R2dbc事务失效分析
一.背景 最近项目持续改造,然后把SpringMVC换成了SpringWebflux,然后把Mybatis换成了R2dbc.中间没有遇到什么问题,一切都那么的美滋滋,直到最近一个新需求的出现,打破了往 ...
- c++基础思维导图2
c++基础思维导图2 结构体 结构体的基本概念:用户自定义的数据类型 结构体定义和使用 struct 结构体名{结构体成员} struct 结构体名 变量名: struct 结构体名 变量名 = {成 ...
- 跟羽夏学 Ghidra ——初识
写在前面 此系列是本人一个字一个字码出来的,包括示例和实验截图.本人非计算机专业,可能对本教程涉及的事物没有了解的足够深入,如有错误,欢迎批评指正. 如有好的建议,欢迎反馈.码字不易,如果本篇文章 ...
- 华南理工大学 Python第7章课后小测-1
1.(单选)以下程序对字典进行排序,按字典键值从小到大排序,空白处的代码是( ): dt={'b':6, 'c':2, 'a':4} s=sorted(dt.items(),key=_____) p ...
- day38-IO流05
JavaIO流05 4.常用的类04 4.4节点流和处理流03 4.4.8打印流-PrintStream和PrintWriter 打印流只有输出流,没有输入流 1.简单介绍及应用 PrintStrea ...
- DFS文件夹无法访问
最近DFS的文件服务器出现了部分文件和文件夹无法访问的情况.客户端直接访问DFS成员的共享文件夹时有是会出现Element not found的错误.有时打开文件的时候会出现文件不存在,或者你没有权限 ...
- Prometheus Operator 对接 Thanos
文章转载自:https://jishuin.proginn.com/p/763bfbd56ae4 使用 Prometheus Operator 来进行监控,在 Prometheus 高可用的章节中也手 ...
- ProxySQL(2):初试读写分离
文章转载自:https://www.cnblogs.com/f-ck-need-u/p/9278839.html 实现一个简单的读写分离 这里通过一个简单的示例实现ProxySQL的读写分离功能,算是 ...