孤儿进程

在操作系统领域中，孤儿进程（Orphan Process）指的是在其父进程执行完成或被后仍继续运行的一类进程。

 解决办法 

 “收养” 

在类UNIX操作系统中，为避免孤儿进程退出时无法释放所占用的资源而僵死，任何孤儿进程产生时都会立即为系统进程init或systemd自动接收为子进程，这一过程也被称为“收养”（）。在此需注意，虽然事实上该进程已有init作为其父进程，但由于创建该进程的进程已不存在，所以仍应称之为“孤儿进程”。

 进程组 

因为父进程终止或崩溃都会导致对应子进程成为孤儿进程，所以也无法预料一个子进程执行期间是否会被“遗弃”。有鉴于此，多数类UNIX系统都引入了进程组以防止产生孤儿进程：在父进程终止后，用户的Shell会将父进程所在进程组标为“孤儿进程组”，并向终止的进程下属所有子进程发出SIGHUP信号，以试图结束其运行，如此避免子进程继续以“孤儿进程”的身份运行。

 远程调用的情况 

遠程過程調用过程中也会产生孤儿进程。例如，若客户端进程在发起请求后突然崩溃，且对应的服务器端进程仍在运行，则该服务器端进程就会成为孤儿进程。这样的孤儿进程会浪费服务器的资源，甚至有耗尽资源的潜在危险，但也有对应的解决办法：

 终止机制：强制杀死孤儿进程（最常用的手段）；
 再生机制：服务器在指定时间内查找调用的客户端，若找不到则直接杀死孤儿进程；
 超时机制：给每个进程指定一个确定的运行时间，若超时仍未完成则强制终止之。若有需要，亦可让进程在指定时间耗尽之前申请延时。

 “孤儿进程”的应用 

除此之外，用户也可能会刻意使进程成为孤儿进程，以使之与用户会话脱钩，并转至后台运行。这一做法常应用于启动需要长时间运行的进程，也即守护进程。另外，UNIX命令nohup也可以完成这一操作。

 参见 
 僵尸进程
 守护进程

 参考 

Category:进程