当你在终端(shell)中运行一个可执行程序,谁是它的父进程?

众所周知,在Linux系统中,所有的进程都是有父子或者堂兄关系的,除了初始进程init,没有任何进程是完全独立的。

除了init进程,系统中每个进程都会有一个父进程,新的进程不是被全新创建的,而是复制父进程的现有资源而生成的。

当我们在shell下运行一个可执行程序,就产生了一个新的进程。那么,问题来了,谁是这个新的进程的父进程?

首先看看下面的代码:

#include <iostream>                                                                                                                           
#include <sys/types.h>
#include <unistd.h>
using namespace std;
int main()
{ 
    while(1)
    { 
        pid_t pid = getpid();	// 获取当前进程ID
        pid_t fpid = getppid(); // 获取父进程ID
        cout << "pid = " << pid << endl;
        cout << "ppid = " << fpid << endl;
        cout << "=================" << endl;
        sleep(5);  // 每隔5s打印一次
    } 
    return 0;                                                                                                                                 
} 

以上的程序实现每隔5s打印当前程序的PID号和父进程的PID号,使用g++编译成可执行文件,在shell下执行:
在这里插入图片描述
可以看到,程序已经成功的执行,并且打印当前进程PID和父进程的PID。此时,我们知道当前进程确实存在父进程,而且PID号也已经知晓。但是,这个父进程到底是谁呢?知道个号码也不知道其身份呀。

这个时候,让程序继续执行,我们打开另一个shell,执行pstree命令。pstree命令是查看系统中运行的进程之间的关系。

如图,pstree执行结果的一部分截图:在这里插入图片描述
我们在pstree的查询结果中,找到当前可执行程序的名称,就能知道它所属的父进程是谁。
在这里插入图片描述

如上图,我们可以知道,当前可执行程序test,它的父进程是fish,fish是shell中的一种,类似于bash。(推荐大家安装使用哦,挺好用的)。

所以,当我们在终端中运行一个可执行程序,它的父进程就是当前运行的shell程序。

另外,重要的一点,我们可以使用pstree查看系统中所有进程的关系。

谢谢阅读。

  • 6
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值