【linux】查看进程和子进程

2024-01-25 09:52
文章标签 linux 查看 进程 和子

本文主要是介绍【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 12483PID TTY          TIME CMD
root@debian:~# ps --ppid 15824PID TTY          TIME CMD
15825 pts/1    00:00:05 proxy
root@debian:~# ps --ppid 15825PID 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 12483test

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

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

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

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

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

这篇关于【linux】查看进程和子进程的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/642907

相关文章

Linux使用fdisk进行磁盘的相关操作

《Linux使用fdisk进行磁盘的相关操作》fdisk命令是Linux中用于管理磁盘分区的强大文本实用程序,这篇文章主要为大家详细介绍了如何使用fdisk进行磁盘的相关操作,需要的可以了解下... 目录简介基本语法示例用法列出所有分区查看指定磁盘的区分管理指定的磁盘进入交互式模式创建一个新的分区删除一个存

Linux使用dd命令来复制和转换数据的操作方法

《Linux使用dd命令来复制和转换数据的操作方法》Linux中的dd命令是一个功能强大的数据复制和转换实用程序,它以较低级别运行,通常用于创建可启动的USB驱动器、克隆磁盘和生成随机数据等任务,本文... 目录简介功能和能力语法常用选项示例用法基础用法创建可启动www.chinasem.cn的 USB 驱动

Python如何使用seleniumwire接管Chrome查看控制台中参数

《Python如何使用seleniumwire接管Chrome查看控制台中参数》文章介绍了如何使用Python的seleniumwire库来接管Chrome浏览器,并通过控制台查看接口参数,本文给大家... 1、cmd打开控制台,启动谷歌并制定端口号,找不到文件的加环境变量chrome.exe --rem

高效管理你的Linux系统: Debian操作系统常用命令指南

《高效管理你的Linux系统:Debian操作系统常用命令指南》在Debian操作系统中,了解和掌握常用命令对于提高工作效率和系统管理至关重要,本文将详细介绍Debian的常用命令,帮助读者更好地使... Debian是一个流行的linux发行版,它以其稳定性、强大的软件包管理和丰富的社区资源而闻名。在使用

Debian如何查看系统版本? 7种轻松查看Debian版本信息的实用方法

《Debian如何查看系统版本?7种轻松查看Debian版本信息的实用方法》Debian是一个广泛使用的Linux发行版,用户有时需要查看其版本信息以进行系统管理、故障排除或兼容性检查,在Debia... 作为最受欢迎的 linux 发行版之一,Debian 的版本信息在日常使用和系统维护中起着至关重要的作

Linux Mint Xia 22.1重磅发布: 重要更新一览

《LinuxMintXia22.1重磅发布:重要更新一览》Beta版LinuxMint“Xia”22.1发布,新版本基于Ubuntu24.04,内核版本为Linux6.8,这... linux Mint 22.1「Xia」正式发布啦!这次更新带来了诸多优化和改进,进一步巩固了 Mint 在 Linux 桌面

LinuxMint怎么安装? Linux Mint22下载安装图文教程

《LinuxMint怎么安装?LinuxMint22下载安装图文教程》LinuxMint22发布以后,有很多新功能,很多朋友想要下载并安装,该怎么操作呢?下面我们就来看看详细安装指南... linux Mint 是一款基于 Ubuntu 的流行发行版,凭借其现代、精致、易于使用的特性,深受小伙伴们所喜爱。对

什么是 Linux Mint? 适合初学者体验的桌面操作系统

《什么是LinuxMint?适合初学者体验的桌面操作系统》今天带你全面了解LinuxMint,包括它的历史、功能、版本以及独特亮点,话不多说,马上开始吧... linux Mint 是一款基于 Ubuntu 和 Debian 的知名发行版,它的用户体验非常友好,深受广大 Linux 爱好者和日常用户的青睐,

python多进程实现数据共享的示例代码

《python多进程实现数据共享的示例代码》本文介绍了Python中多进程实现数据共享的方法,包括使用multiprocessing模块和manager模块这两种方法,具有一定的参考价值,感兴趣的可以... 目录背景进程、进程创建进程间通信 进程间共享数据共享list实践背景 安卓ui自动化框架,使用的是

Linux(Centos7)安装Mysql/Redis/MinIO方式

《Linux(Centos7)安装Mysql/Redis/MinIO方式》文章总结:介绍了如何安装MySQL和Redis,以及如何配置它们为开机自启,还详细讲解了如何安装MinIO,包括配置Syste... 目录安装mysql安装Redis安装MinIO总结安装Mysql安装Redis搜索Red