【linux】查看进程和子进程

在Linux系统中,可以使用多个命令来查看进程及其子进程。以下是一些常用的方法:

1. ps 命令

ps 命令用于显示当前进程的状态。可以结合不同的选项来查看进程及其子进程。

 查看进程树:

ps -auxf

- -a 显示所有进程。
- -u 显示进程的用户/所有者。
- -x 显示没有控制终端的进程。
- -f 显示完整的格式。

查看特定进程的子进程:

ps --ppid PID

- --ppid 指定父进程ID。

2. 使用pstree:

pstree 命令以树状图的形式显示进程及其子进程。如果没有 pstree,可以通过包管理器安装它。

pstree PID

- PID 是想要查看的进程的进程ID。

3. top 或 htop 命令

top 命令会动态显示系统中运行的进程。`htop` 是 top 的一个增强版,提供了一个更好的用户界面和更多的特性。

在 top 中查看:

在 top 命令的输出中,可以看到每个进程旁边的 PID(进程ID)和 PPID(父进程ID)。

在 htop 中查看:

htop

在 htop 中,可以通过F5键来切换到树形视图,直观地看到进程之间的层级关系。

4. /proc 文件系统

Linux的 /proc 文件系统包含了系统运行时的各种信息,包括进程的详细信息。

查看进程的子进程列表:

- 首先,找到进程的 /proc 目录:

ls /proc/PID/task/

- 在每个任务目录下,你可以找到一个名为 children 的文件,其中列出了该进程创建的所有子进程的PID:

cat /proc/PID/task/TID/children

替换 PID 为进程ID,`TID` 为线程(任务)ID,通常线程ID与父进程ID相同。
选择上述方法的任意一种,都可以有效查看Linux系统中的进程以及它们的子进程。通常,pstree 和 htop 提供的视图是最容易理解的,特别是对于可视化整个进程树。

5. 实例

ps命令

root@debian:~# ps auxf|grep test
root     15824  0.0  0.1  68028 11800 pts/1    S+   15:40   0:00  |       \_ ./test
root     15825  2.0  0.1 171332 13080 pts/1    Sl+  15:40   0:05  |           \_ ./test
root     16662  0.0  0.0   6072   884 pts/2    S+   15:45   0:00  |       \_ grep test
root     12483  0.0  0.1  68028 11892 pts/1    S    15:24   0:00 /root/test

在提供的 ps auxf|grep proxy 输出中,可以看到有几个与 test相关的进程列表。这里逐个解释它们的关系:
1. 进程 12483
   这个进程是 /root/test的一个实例,它可能是之前在后台启动的某个 test程序。根据给定的信息,这个进程正以前台模式运行,但并没有显示具体的父子进程关系。
2. 进程 15824
   进程15824是一个正在运行的 ./test程序,它是由pts/1终端启动的,这可以看作是一个shell终端。根据 ps 输出的格式,它看起来像是以前台模式启动的,或者可能是被挂起(由字符 S+ 可见)。
3. 进程 15825
   进程15825是第二个正在运行的 ./test实例,并且它由进程15824作为父进程。字符 Sl+ 表明这是多线程的(`l`),它正以前台运行,并位于pts/1终端。
4. 进程 16662
   这是执行 grep test命令的进程,我们通常会忽略这个进程,因为它只是暂时出现在 ps 命令的输出中,用来搜索包含 "test" 文本的行。这个过程是短暂的,并且执行完毕后就会退出。
从这个输出中,我们可以看到:
- 进程15825似乎是进程15824的子进程,它们都关联到了同一个终端(pts/1)。
- 进程12483则是一个独立的进程,与进程15824和15825的父子关系不明确。根据输出格式,进程12483没有被另一个 test程序作为子进程启动。

root@debian:~# ps --ppid 12483
  PID TTY          TIME CMD
root@debian:~# ps --ppid 15824
  PID TTY          TIME CMD
15825 pts/1    00:00:05 proxy
root@debian:~# ps --ppid 15825
  PID TTY          TIME CMD
root@debian:~#

通过 ps --ppid PID 命令可以查看指定父进程ID (PPID) 下的子进程。对于每个 PID (如12483、15824、15825),都运行了 ps --ppid 来获取其可能的子进程。
从给出的输出中,我们可以看到:
- 进程 12483 没有子进程,因为 ps --ppid 12483 没有列出任何结果。
- 进程 15824 是进程 15825 的父进程,因为 ps --ppid 15824 显示了 15825 这个PID。
- 进程 15825 没有子进程,因为 ps --ppid 15825 没有列出任何结果。
同时值得注意的是,使用 ps auxf 获取了一个树状的进程列表,这里 | \_ 已经表示了父子关系,在这个视图里可以直观地看到哪些进程是其他进程的子进程。
如果想要一次性看到父进程和其对应的子进程列表,可以考虑使用以下命令来格式化输出:

root@debian:~# ps -f --ppid 12483,15824,15825
UID        PID  PPID  C STIME TTY          TIME CMD
root     15825 15824  0 15:40 pts/1    00:00:05 ./test

这样会展示所有 PID 为 12483、15824、15825 的父进程的直接子进程。

pstree

root@debian:~# pstree 12483
test
root@debian:~# pstree 15824
test───test───{test}
root@debian:~# pstree 15825
test───{test}

输入 pstree -p 会将进程ID也显示出来:

root@debian:~# pstree -p 12483
test(12483)
root@debian:~# pstree -p 15824
test(15824)───test(15825)───{test}(15826)
root@debian:~# pstree -p 15825
test(15825)───{test}(15826)

Linux系统中的 pstree 命令用于以树形图的方式显示所有进程的启动关系。输出结果中的进程名字后面可能跟随一些特殊字符和花括号 {} 来表示不同的含义。例如,花括号内的名称通常用来表示线程。
从ps auxf 命令的输出中,我们看到进程 12483、15824 和 15825 都是名为 test的进程。根据 pstree 命令的结果,我们可以解释如下:
1. 对于进程 12483:   

   root@debian:~# pstree 12483
   test

   这表明进程 12483 是一个独立的进程,并没有任何子进程。它可能是之前启动的一个 test进程,目前运行在后台。
2. 对于进程 15824:   

   root@debian:~# pstree 15824
   test───test───{test}

   这表示进程 15824 有一个子进程,它的名字也是 test,而这个子进程还拥有自己的线程(或线程组),这些线程在输出中由花括号 {test} 表示。通常这表示父进程在执行过程中已经创建了子进程,并且这个子进程可能是多线程的。
3. 对于进程 15825:   

   root@debian:~# pstree 15825
   test───{test}

   这说明进程 15825 同样拥有自己的线程,表示它是一个多线程进程。注意到 15825 是 15824 的子进程,它们很可能是相同的应用程序,在不同的上下文或时间点创建。
命令输出显示了几个不同的 test进程和它们的启动关系,以及这些进程的子进程和线程情况。注意,pstree 不会列出所有的线程,只会列出有实际名称的线程,或者使用 {} 表示一个线程的集合。上述三个 pstree 命令输出说明 12483 是一个单独进程,位于独立的执行环境中;而 15824 在创建了 15825 这个子进程之后,还有另外一个或多个线程在运行;15825 看起来是一个多线程进程。 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

2024年最适合开Palworld的游戏服务器

如果要开Palworld服务器,当然要选大内存的服务器 在雨云,你不仅可以 链接:雨云 - 新一代云服务提供商欢迎来到以用户体验为优先的雨云,我们提供稳定高速的国际虚拟主机,云服务器产品,强大的功能&#xff…

MySQL中使用percona-xtrabackup工具 三种备份及恢复 (超详细教程)

CSDN 成就一亿技术人! 今天讲讲再MySQL中使用percona-xtrabackup这个开源工具来实现在线备份。 CSDN 成就一亿技术人! 目录 介绍percona-xtrabackup 安装Percona 完整备份 备份流程 恢复流程 1.模拟文件损坏 2.滚回日志 3.恢复数据目录 4.授权…

复现五 LMDeploy 的量化和部署

0基础知识 一步一步跟着教程复现第五:LMDeploy 的量化和部署 复现一: 轻松玩转书生浦语大模型internlm-demo 配置验证过程_ssh -cng -l 7860:127.0.0.1:6006 rootssh.intern-ai-CSDN博客文章浏览阅读827次,点赞17次,收藏24次。…

BTC的数据结构Merkle Tree和Hash pointer

比特币是一种基于区块链技术的加密数字货币,其底层数据结构被设计为分布式,去中心化的。它的核心数据结构是一个链式的区块,每个区块都包含了多笔交易记录和一个散列值。 比特币的底层数据结构使用了两个关键概念:hash pointer和…

01 Redis的特性+下载安装启动+Redis自动启动+客户端连接

1.1 NoSQL NoSQL(“non-relational”, “Not Only SQL”),泛指非关系型的数据库。 键值存储数据库 : 就像 Map 一样的 key-value 对。如Redis文档数据库 : NoSQL 与关系型数据的结合,最像关系…

AP3464 车充 适配器IC 4-30V 2.4A 同步降压驱动器

AP3464 是一款支持宽电压输入的同步降压电源管理芯片,输入电压 4-30V 范围内可实现2.4A 的连续电流输出。通过调节 FB 端口的分压电阻,设定输出 1.8V 到 28V 的稳定电压。AP3464 具有优秀的恒压/恒流(CC/CV)特性。AP3464 采用电流模式的环路控制原理&…

Spring5深入浅出篇:Spring中ioc(控制反转)与DI(依赖注入)

Spring5深入浅出篇:Spring中ioc(控制反转)与DI(依赖注入) 反转(转移)控制(IOC Inverse of Control) 控制:对于成员变量赋值的控制权 反转控制:把对于成员变量赋值的控制权,从代码中反转(转移)到Spring⼯⼚和配置⽂件中完成好处:…

基于YOLOv8的摄像头吸烟行为检测系统(Python源码+Pyqt6界面+数据集)

💡💡💡本文主要内容:详细介绍了摄像头下吸烟行为检测系统,在介绍算法原理的同时,给出Pytorch的源码、训练数据集以及PyQt6的UI界面。在界面中可以选择各种图片、视频进行检测识别,可进行置信度、Iou阈值设定…

Pandas.Series.mode() 众数 详解 含代码 含测试数据集 随Pandas版本持续更新

关于Pandas版本: 本文基于 pandas2.2.0 编写。 关于本文内容更新: 随着pandas的stable版本更迭,本文持续更新,不断完善补充。 传送门: Pandas API参考目录 传送门: Pandas 版本更新及新特性 传送门&…

LeetCode---122双周赛

题目列表 3010. 将数组分成最小总代价的子数组 I 3011. 判断一个数组是否可以变为有序 3012. 通过操作使数组长度最小 3013. 将数组分成最小总代价的子数组 II 一、将数组分成最小总代价的子数组I 这道题纯纯阅读理解题,关键在于理解题意。注意:第一…

Go语言基础之单元测试

1.go test工具 Go语言中的测试依赖go test命令。编写测试代码和编写普通的Go代码过程是类似的,并不需要学习新的语法、规则或工具。 go test命令是一个按照一定约定和组织的测试代码的驱动程序。在包目录内,所有以_test.go为后缀名的源代码文件都是go …

【时间安排】

最近刚刚回到家,到家就是会有各种事情干扰,心里变乱人变懒的,而要做的事情也要继续,写论文,改简历,学习新技能。。 明天后天两天写论文改简历 周一(早上去城市书房,可能吵一点戴个耳…

Java 的反射学习总结

一、什么是反射? 反射是指在运行时动态地获取、检查和修改类或对象的信息的能力,不需要在编译时知道类的具体细节。 二、如何获取类对象? 三、如何通过类对象来创建类的对象? 四、类对象获取类构造器的方式 通过获取私有构造器创…

招聘网站简单爬虫_24.1.26

完整程序传送门 24.1.26 前些天接了一个大两届的师兄的小活,做了一下爬boss直聘岗位信息的程序,在这里记录一下 程序框架 定义一个名为paQu的接口函数,用于检查窗口的输入,它接受一个参数self,获取self对象的a属性&am…

vmware-VCSA6.0部署

下载vcsa的iso包,解压后首先安装VMware-ClientIntegrationPlugin-6.0.0-6823256.exe 如果不配置域名配置成ip地址也可以 https://172.16.51.202/

1948-2022年金融许可信息明细数据

1948-2022年金融许可信息明细数据 1、时间:1948-2022年 2、来源:银监会(银监会许可证发布系统) 3、指标:来源表、机构编码、机构名称、所属银行、机构类型、业务范围、机构住所、地理坐标、行政区划代码、所属区县、…

Cloudreve的部署、迁移与新增离线下载节点

如果你是一个万物皆想编译的大佬,那么可以参考这里的官方文档: 构建 - Cloudreve 我们以使用官方提供的已编译的二进制文件部署为例 首先需要购买一台服务器,推荐使用美国等境外服务器,配置1核1G即可,但推荐2核2G Cl…

C++this指针

我们由一个题目引入&#xff1a; class Date { public:void Init(int year2024, int month1, int day27){_year year;_month month;_day day;}void Print(){cout << _year << "-" << _month << "-" << _day << en…

阿里云推出第八代企业级实例 g8i:AI 推理性能最高提升 7 倍、可支持 72B 大语言模型

云布道师 1 月 11 日&#xff0c;全球领先的云计算厂商阿里云宣布推出第八代企业级通用计算实例 ECS g8i&#xff0c;这也是国内首款搭载第五代英特尔至强可扩展处理器&#xff08;代号 EMR&#xff09;的云计算产品。依托阿里云自研的「飞天CIPU」架构体系&#xff0c;ECS g8…

分布式事务入门,最终一致性方案

分布式事务 回顾分布式事务 上篇内容我们说到了分布式事务的基本内容&#xff0c;讲到了分布式事务的实现主要有事务协调以及最终一致性两件事情来完成整个逻辑。 那么上个文章我们说过了 2PC、3PC、XA 三种协调事务的协议&#xff0c;这次我们来说事务协调处理完成后&#x…