孤儿进程~

孤儿进程~,第1张

孤儿进程~

        一般情况下,子进程是由父进程创建,而子进程和父进程的退出是无顺序的,两者 之间都不知道谁先退出。正常情况下父进程先结束会调用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 来收养孤儿进程。

 

 

完结!!!!!!    

        

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5502238.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-13
下一篇 2022-12-13

发表评论

登录后才能评论

评论列表(0条)

保存