Как создать зомби-процесс, который нельзя пожинать за несколько минут

Может ли кто-нибудь предложить мне простой способ создать зомби-процесс, который нельзя пожинать несколько минут.
Цель этого состоит в том, чтобы проверить родительский процесс на способность вызывать процессы зомби после того, как они снова становятся доступными.

Один случай для неужиных зомби может быть найден Вот. Я думаю, что могут быть более простые способы сделать это.

ОС: Linux

Предпочтительные языки: C / C ++

0

Решение

Вот небольшая программа, которая заставит зомби появиться в вашем выводе «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's 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()");
}
0

Другие решения


По вопросам рекламы [email protected]