linux php 进程进阶(二) 孤儿进程

孤儿进程

我们经常听别人说到孤儿进程(Orphan Process),究竟是什么呢。

  1. 根据公开资料的解释,孤儿进程指的是在其父进程执行完成或被终止后仍继续运行的一类进程。

  2. 孤儿进程与僵尸进程是完全不同的,后面会详细介绍僵尸进程。而孤儿进程借用了现实中孤儿的概念,也就是父进程不在了,子进程还在运行,这时我们就把子进程的PPID设为1。前面讲PID提到,操作系统会创建进程号为1的init进程,它没有父进程也不会退出,可以收养系统的孤儿进程。

  3. init进程是Linux系统下的奇怪进程,这个进程是以普通用户权限运行但却具备超级权限的进程,简单地说,这个进程在Linux系统启动的时候做初始化工作,比如会根据/etc/inittab中设置的运行等级初始化系统等等,当然了,还有一个作用就是如上所说的:收养孤儿进程。

  4. 下面实现一个简单的孤儿进程,包含孤儿进程被init收养过程

<?php
$pid = pcntl_fork(); //fork 一个子进程
if($pid > 0){
	//父进程运行逻辑
 	echo "父进程 PID:".posix_getpid().PHP_EOL;
	// 睡眠5秒
 	sleep(5);
}else if($pid == 0){
	//子进程运行逻辑
  	for($i=1; $i<=10; $i++){
		//睡眠1秒
    	sleep(1);
    	// 获取当前进程父进程id
    	echo "PPID:".posix_getppid().PHP_EOL;
  	}
}else{
	//fork 进程错误
	echo "fork 进程错误".PHP_EOL;
}

在这里插入图片描述
5. 可以看到,前五秒内,子进程的父进程进程ID为7724,但是从第6秒开始,由于父进程已经提前退出了,子进程变成孤儿进程,所以init进程收养了子进程,所以子进程的父进程进程ID变成了1。

作用

在现实中用户可能刻意使进程成为孤儿进程,这样就可以让它与父进程会话脱钩,成为后面会介绍的守护进程。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值