栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

孤儿进程~

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

孤儿进程~

        一般情况下,子进程是由父进程创建,而子进程和父进程的退出是无顺序的,两者 之间都不知道谁先退出。正常情况下父进程先结束会调用wait或者 waitpid 函数 等待子进程完成再退出,而一旦父进程不等待直接退出,则剩下的子进程会被 init(pid=1)进程接收,成会孤儿进程。(进程树中除了 init 都会有父进程)。

         给子进程设置sleep(10),保证父进程先退出。

//孤儿进程
#include
#include 
#include 
#include 
#include 
#include 
using namespace std;

int main()
{
	//创建子进
	pid_t pid = fork();
	if(pid<0) //fork失败的情况
	{
		perror("fork error");
		return -1;
	}
	else if(pid>0)//父进程
	{
	
		cout << "father:[pid]=" << getpid() << "[fpid]=" << getppid() << endl;
	}
	else if(pid==0) //子进程
	{
		
		sleep(10);//保证父进程先退出
		cout << "child:[pid]=" << getpid() << "[fpid]=" << getppid() << endl;
	}
	

	return 0;
}

         执行后我们发现子进程的FPID不再是创建它的子进程变成了一个别的id;被别人领养但并非init(pid=1)进程;原因如下:

        原来 upstart 是init 演进来的,可以说是一种新型的 init系统,传统的 sysvinit 已经淡出历史舞台,新系统 UpStart 和 systemd 各有特点,而越来越多的 Linux 发行版采纳了 systemd。ubuntu 较新的发行版都用 upstart 代替 init 来收养孤儿进程。

 

 

完结!!!!!!    

        

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/509847.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号