【linux】查看进程和子进程

news2024/9/24 13:13:14

在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 看起来是一个多线程进程。 

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

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

相关文章

AI伦理边界:探索人工智能伦理计算

大家好,近年学界与工业界都已开始关注并热议 AI 伦理治理问题,也在伦理规范研究上取得了初步进展。然而,由于 AI 伦理的抽象性,如何定量化度量智能系统的伦理,还是一个未知的难题。 李学龙教授团队在《中国科学&#…

【学网攻】 第(5)节 -- Cisco VTP的使用

文章目录 【学网攻】 第(1)节 -- 认识网络【学网攻】 第(2)节 -- 交换机认识及使用【学网攻】 第(3)节 -- 交换机配置聚合端口【学网攻】 第(4)节 -- 交换机划分Vlan 前言 网络已经成为了我们生活中不可或缺的一部分,它连接了世界各地的人们,让信息和资…

apple watch开通esim(一号双终端)报错解决方法

写在前面: 本文不一定可以解决您问题,本文记录了作者在遇到该情况时的处理办法,导致这个问题的原因会有很多,本文仅记录部分,仅供读者参考。与客服人员沟通时,请避免说esim,大多数客服人员不一定…

windbg :查看局部变量值

查看变量有以下几种常用方式&#xff1a; 仍以我们上篇 &#xff1a; 《windbg : x 命令》中的代码作为示例来讲解使用。 源码&#xff1a; #include <iostream>using namespace std;struct JKGirl{std::string name;int age;friend ostream& operator <<(o…

【机器学习300问】17、什么是欠拟合和过拟合?怎么解决欠拟合与过拟合?

一个问题出现了&#xff0c;我们首先要描述这个问题&#xff0c;然后分析问题出现的原因&#xff0c;找到原因后提出解决方案。废话不多说&#xff0c;直接上定义&#xff0c;然后通过回归和分类任务的例子来做解释。 一、什么是欠拟合和过拟合&#xff1f; &#xff08;1&am…

面试题:String s = new String(“xyz“) 创建了几个对象?

项目场景&#xff1a; 今天分享一篇基础技术面试题。 这个问题相信每个学习 java 的同学都不陌生&#xff0c;作为一个经典的面试题&#xff0c;到现在工作这么多年了我真是认为挺操蛋的一个问题&#xff0c;在网上到现在你仍然可以看见很多讨论这个问题的人&#xff0c;其中不…

酷开科技 | 酷开系统体育频道燃爆体育赛事,为偶像疯狂打CALL

体育竞技&#xff0c;总会带给我们激情澎湃的感受&#xff0c;兴奋、激动、热血&#xff0c;这些瞬间也许就是竞技体育的魅力&#xff01;酷开科技通过酷开系统的体育频道&#xff0c;为广大体育迷们提供了一个观赛平台。在这个平台上&#xff0c;你可以欣赏到各类体育赛事的精…

用JavaFX写了一个简易的管理系统

文章目录 前言正文一、最终效果1.1 主页面1.2 动物管理页面-初始化1.3 动物管理页面-修改&新增1.4 动物管理页面-删除&批量删除 二、核心代码展示2.1 启动类2.2 数据库配置-db.setting2.3 日志文本域组件2.4 自定义表格视图组件2.5 自定义分页组件2.6 动物管理页面2.7 …

JVM/GC复习1---更新中

JVM/GC JVMGC垃圾回收算法1.引用计数法2.标记清除发3.标记压缩算法4.复制算法5.分代算法 收集器1.串行垃圾收集器2.并行垃圾收集器2.CMS垃圾收集器 3.G1垃圾收集器(重点)jdk1.7开始1.9默认的回收器Young GC模式Mixed GCFull GC JVM 待更新中ing GC 垃圾回收:程序运行的时候必…

2024年美赛数学建模思路 - 案例:异常检测

文章目录 赛题思路一、简介 -- 关于异常检测异常检测监督学习 二、异常检测算法2. 箱线图分析3. 基于距离/密度4. 基于划分思想 建模资料 赛题思路 &#xff08;赛题出来以后第一时间在CSDN分享&#xff09; https://blog.csdn.net/dc_sinor?typeblog 一、简介 – 关于异常…

【JSON2WEB】03 go的模板包html/template的使用

Go text/template 是 Go 语言标准库中的一个模板引擎&#xff0c;用于生成文本输出。它使用类似于 HTML 的模板语言&#xff0c;可以将数据和模板结合起来&#xff0c;生成最终的文本输出。 Go html/template包实现了数据驱动的模板&#xff0c;用于生成可防止代码注入的安全的…

一文掌握Shell

文章目录 Shell概述脚本的常用执行方式Linux中的sh解释器Linux中的/etc 编写sh脚本第一个sh脚本变量1. 系统预定义变量2. 自定义变量3. 变量定义规则单引号和双引号的区别 4. 特殊变量 运算符命令替换条件判断常用判断语句 流程控制if语句case语句while循环 read读取控制台输入…

生产、计划、仓库、质量,一大堆的工厂数据要怎么收集?MES系统替你解决!

随着制造业的发展和进步&#xff0c;工厂运营面临着越来越多的挑战&#xff0c;特别是在数据管理和生产过程控制方面。生产、计划、仓库、质量等方面的数据分散在各个系统和部门中&#xff0c;数据的收集和分析变得复杂而困难。然而&#xff0c;MES系统为工厂提供了一个综合性解…

成功安装DCNv4

最终结果 终于安装成功了。 环境 系统&#xff1a;ubuntu22.04 CUDA&#xff1a;12.1 python&#xff1a;3.11 显卡驱动&#xff1a;545 安装过程 系统、CUDA和python的安装过程忽略&#xff0c;这些都能找到。这里只写不同的地方。 配置CUDAHOME 执行命令“ gedit ~/…

余弦定理是怎么推导的?

余弦定理是怎么推导的? 已知余弦定理(low of cosines)表达如下: A B 2 = B C 2 + A C 2 − 2 B C ∗ A C ∗ cos ⁡ θ AB^2=BC^2+AC^2-2BC*AC*\cos \theta AB2=BC2+AC2−2BC∗AC∗cosθ,其中 A B , B C , A C AB,BC,AC AB,BC,AC和 θ \theta θ的关系如下: 那么这个公式是…

数据库缓存策略

数据库缓存策略 以下是数据库与缓存的五种常见策略。 1缓存旁路 缓存旁路&#xff08;Cache-Aside&#xff09; 在缓存旁路策略中&#xff0c;数据库缓存位于数据库旁边。当应用程序请求数据时&#xff0c;它会首先检查缓存 如果缓存中存在数据&#xff08;缓存命中&#xff…

风速预测 | Python基于CEEMDAN-CNN-Transformer+ARIMA的风速时间序列预测

目录 效果一览基本介绍程序设计参考资料 效果一览 基本介绍 CEEMDAN-CNN-TransformerARIMA是一种用于风速时间序列预测的模型&#xff0c;结合了不同的技术和算法。收集风速时间序列数据&#xff0c;并确保数据的质量和完整性。这些数据通常包括风速的观测值和时间戳。CEEMDAN分…

SpringCloudAlibaba系列之Nacos实战

目录 注意事项 参考资源 Nacos配置中心 初始化项目 进行Nacos相关配置 运行 Nacos注册中心 dubbo方式 对外暴露接口dubbo-api 服务提供者dubbo-provider 服务消费者dubbo-consumer 负载均衡客户端方法 服务提供者 服务消费者 注意事项 不管是使用Nacos配置中心&…

使用POI生成word文档的table表格

文章目录 使用POI生成word文档的table表格1. 引入maven依赖2. 生成table的两种方式介绍2.1 生成一行一列的table2.2 生成固定行列的table2.3 table合并列2.4 创建多个table存在的问题 使用POI生成word文档的table表格 1. 引入maven依赖 <dependency><groupId>org.…

智能家居20年,从「动手」到「用脑」

【潮汐商业评论/原创】 正在装修新家的Carro最近陷入了纠结之中&#xff0c;“还没想好要怎么装一套完整的智能家居&#xff0c;家里的基装就已经开始了。” 事实上&#xff0c;Carro对智能家居也不了解&#xff0c;并不知道该如何下手&#xff0c;心想“要是能一次性设计好就…