Может ли кто-нибудь предложить мне простой способ создать зомби-процесс, который не может быть получен в течение нескольких минут. Цель этого - протестировать родительский процесс для возможности использовать процессы зомби после их повторного использования.
Один случай для невосполнимых зомби можно найти здесь. Я предполагаю, что могут быть более простые способы сделать это.
ОС: Linux
Предпочтительные языки: C/C++
Здесь небольшая программа, которая заставит зомби появиться в вашем "ps aux" выходе в течение нескольких минут. Обратите внимание на пропущенный waitpid(); если вы не прокомментируете этот вызов, зомби не появится, так как вызов waitpid() заставляет родительский процесс требовать его мертвого ребенка.
(Отказ от ответственности: я только тестировал это под MacOS/X, так как тот компьютер, на котором я нахожусь, но он должен работать так же в Linux)
#include <stdio.h>
#include <signal.h>
#include <pthread.h>
#include <sys/wait.h>
#include <unistd.h>
int main()
{
printf("Starting Program!\n");
int pid = fork();
if (pid == 0)
{
printf("Child process %i is running!\n", getpid());
sleep(300); // wait 5 minutes
printf("Child process %i is exiting!\n", getpid());
return 0;
}
else if (pid > 0)
{
printf("Parent process is continuing child pid is %i...\n", pid);
sleep(5); // just for clarity
printf("Parent process is sending SIGKILL to child process...\n");
if (kill(pid, SIGKILL) != 0) perror("kill");
// waitpid(pid, NULL, 0); // uncomment this to avoid zombie child process
printf("Parent process is sleeping... ps aux should show process #%i is a zombie now\n", pid);
sleep(500); // just for clarity
printf("Parent process is exiting!\n");
}
else perror("fork()");
}
sleep(ETERNAL);