如何获取祖父母/祖先进程ID?

2024-02-05

我想知道 - 如果可能的话 - 如何获取进程的祖父母(或更进一步)的pid。

更具体地说,我想要一个进程在进程树中打印其深度。 例如,当从以下内容开始时:

int main() {
    int creator_id = (int) getpid();
    pid_t pid1 = fork();
    pid_t pid2 = fork();
    pid_t pid3 = fork();        

    //print depth in process tree of each process

    return 0;
}

根据我的理论,这棵树看起来像这样:

               0
              /|\ 
             / | \
            /  |  \
           0   0   0
          / \  |            
         0   0 0  
        /            
       0

所以我的第一个想法是以某种方式看看我必须多久才能找到创建者的 pid。

作为一个小旁注: 我还想知道是否可以从下往上打印,也就是说最深层的所有流程都会先打印。


如何获取进程的祖父母(或更进一步)的 pid。

这取决于您使用的操作系统,因为您使用fork()要在您的示例中创建新进程,我想您正在使用一些类 Unix 系统。

如果您使用 Linux 并且知道进程的 pid,您可以从以下位置获取其父进程的 pid/proc/[pid]/stat http://man7.org/linux/man-pages/man5/proc.5.html,该文件中的第四个字段。通过这个父子链,你可以找到一个进程的所有祖先。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何获取祖父母/祖先进程ID? 的相关文章

  • 无法使用 ref 调用 connect redux 组件上的子方法

    我想打电话SingleCard子组件方法renderHiddenItem 我分配了不同的ref每个的名字renderItem 但当我打电话时这个名字 it is undefined 这段代码有什么问题吗 我怎样才能实现这个目标
  • 如何更改Linux中每个用户的默认最大进程数

    我在更改 Linux 中用户的默认进程数时遇到了问题 我尝试过编辑 etc security limits conf文件并添加以下行 malintha hard nproc 10000 保存后我尝试在终端上执行以下命令 ulimit u 它
  • C# 中防止子进程显示 shell 窗口

    我正在使用 ffmpeg 编译视频 我想防止它在执行操作时显示控制台 这是我启动 ffmpeg 的方法 ProcessStartInfo si new ProcessStartInfo si Arguments string Format
  • 从 C# .net 调用 python.py

    我在从 C 调用 python 脚本时遇到问题 我的 python 脚本根据参数 1 和参数 2 计算一个值并发送计算出的值 我无法获得计算值 比如说 我正在使用一个简单的 python 类并调用 C 以下是 python py impor
  • 如何知道gdb附加了哪个进程(stat: T)?

    当 gdb 附加进程时 该进程的 stat 为 T 例如 root 6507 0 0 0 0 67896 952 Ss 12 01 0 00 mytest root 6508 0 0 0 0 156472 7120 Sl 12 01 0 0
  • 子元素悬停时的 CSS 过渡

    当子元素的父元素悬停在其上方时 我试图暂停子元素的显示 Html span div This Is The Child div Some Text in the span span Css span position relative sp
  • 如何启动第二个 Java 进程?

    如何启动第二个独立于平台的 Java 进程 理想情况下 它应该与当前运行的 Java 版本相同 有什么有用的系统属性吗 您可以使用java home系统属性来查找当前的 JVM String jvm new java io File new
  • 在 NTVDM 下运行的 16 位应用程序

    我正在执行一些旧的 16 位应用程序 我们的内部人员不应再使用这些应用程序 它们是 1985 年的 DOS 应用程序 因此捕获它们很容易 捕获在 NTVDM exe 下启动的任何进程 现在的问题是找出哪个程序 NTVDM 实际上在幕后运行
  • 使用 winforms 、 mdi 、父子窗体,在父窗体下指定空间打开子窗体

    我有一个 winform MAINFORM 需要以此形式打开子窗体 如图所示 黑色部分是一个面板并且包含一个编号 具有多个节点的 LinkLabels 和 Treeview 在其余部分中 我想在单击面板上的链接标签时显示子表单 子表单应完全
  • 如何在 C++ 中检查文件是否已被另一个应用程序打开?

    我知道 有is open C 中的函数 但我希望一个程序检查文件是否尚未被另一个应用程序打开 有没有办法使用标准库来做到这一点 编辑 在答案中澄清这是针对 Linux 应用程序的 不仅标准库没有这个功能 一般来说也是不可能的 你可以 在li
  • 线程/进程/任务之间有什么区别?

    线程 进程 任务之间有什么区别 Process 进程是正在执行的计算机程序的实例 它包含程序代码及其当前活动 根据操作系统 OS 进程可能由同时执行指令的多个执行线程组成 基于进程的多任务处理使您能够在使用文本编辑器的同时运行 Java 编
  • Windows 服务和 Windows 进程有什么区别?

    是什么不同之处窗户之间service和一个窗户process 服务是真正的 Windows 进程 没有区别 服务的唯一特殊之处在于它由操作系统启动并在单独的会话中运行 一种独立的方式 可防止其干扰桌面会话 传统上命名为daemon http
  • c 中的分叉和管道过程

    所以我有一个项目要做 但我完全被难住了 我花了十个小时却一无所获 我并不是特别想要答案的代码 但是一些伪代码和正确方向的良好提示将有帮助 它分叉多个进程 k 命令行参数 通过管道连接 每个进程都连接到下一个进程 最后一个进程连接到第一个进程
  • 在 Perl 中,如何从父进程向子进程发送消息(或信号),反之亦然?

    我正在编写一个管理多进程的程序 这就是我所做的 而且效果很好 但现在 我想将消息从子进程发送到父进程 反之亦然 从父进程到子进程 你知道最好的方法吗 你知道我所做的是否是我想要的正确方法 从子进程到父进程发送消息 信号或共享内存 反之亦然
  • Visual Studio Code,调试子进程不起作用

    我有这个确切的问题 https github com Microsoft vscode cpptools issues 511 https github com Microsoft vscode cpptools issues 511 但那
  • Subsonic - 任何人都可以提供使用 Subsonic SimpleRepository 来保存对象列表/数组的示例吗?

    我正在寻找可能的方法来保留以下课程 亚音速简单存储库看起来它可能有效 而且当我问一个人时 人们说它应该有效更一般的问题 https stackoverflow com questions 1527805 orms that work wit
  • 如何在Windows 8上执行“jps”命令?

    我想查看我的工作 java 进程 所以我想执行jps m 但在我的新 Windows 8 机器上出现此错误消息 Microsoft Windows Version 6 3 9600 c 2013 Microsoft Corporation
  • method_存在于父类php中

    我正在尝试使用 php 函数 method exists 但我需要检查该方法是否存在于对象的父类中 so class Parent public function myFunction class Child extends Parent
  • 为什么我的 NHibernate 包集合没有动态设置子项的“父 ID”?

    我有一个新对象 其中包含一些作为 IList 属性的新对象的集合 我通过sql探查器看到正在执行两个插入查询 一个用于父级 它具有新的guid id 另一个用于子级 但是 引用父级的子级上的外键是一个空guid 这是我在父级上的映射
  • 在 Linux 上更快地分叉大型进程?

    在现代 Linux 上达到与 Linux 相同效果的最快 最好的方法是什么 fork execve combo 从一个大的过程 我的问题是进程分叉大约 500MByte 大 并且一个简单的基准测试只能从进程中实现约 50 个分叉 秒 比较最

随机推荐