はい、理論上は可能です。
ただし、プロセスを所有している場合、プロセスが終了したというメッセージをあなた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;
}
これを実行しps a
、プロセスを表示するために使用するa.out
と、PID が互いに近い状態で 2 回表示されます。が出力child exited
されると、2 番目のプロセスのステータスが次のようになることがわかります。
12362 pts/0 Z+ 0:00 [a.out] <defunct>
ここで Z は、「ゾンビ」プロセスであることを意味します。最初のプロセスの 60 秒が終了すると、消えます。