是的,理论上可以,而且你也可以。
但是,如果您拥有该进程,则它将是一个“僵尸”进程,直到您waitpid
或类似的函数收到该进程死亡的消息[除非分叉进程使用detach
与拥有进程的连接断开连接]。
展示:
#include <sys/wait.h>
#include <sys/types.h>
#include <unistd.h>
#include <iostream>
int main()
{
int pid = fork();
if (pid)
{
int p = 0;
int status;
sleep(60);
p = wait(&status);
std::cout << "Pid " << p << " exited..." << std::endl;
}
else
{
for(int i = 0; i < 20; i++)
{
std::cout << "Child is sleeping..." << std::endl;
sleep(1);
}
std::cout << "Child exited..." << std::endl;
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
如果您运行此命令并使用它ps a
来查看进程,您将看到a.out
两次,并且 PID 彼此接近。一旦打印出来child exited
,您将看到第二个进程的状态如下所示:
12362 pts/0 Z+ 0:00 [a.out] <defunct>
Run Code Online (Sandbox Code Playgroud)
这里的Z表示这是一个“僵尸”进程。当第一个过程的 60 秒结束后,它就会消失。