Процесс зомби, созданный в коде и убитый в другой части
Я хочу написать "создатель зомби" и "терминатор зомби". Суть в том, что я хочу создать зомби в одной части и завершить их в другой части кода. Я использую C.
Пример:
create_zombie(); //let's say it's a spawn, using fork etc.
/* a houndred lines below */
kill_zombie(PID); // PID is determinated by user, I want to leave him the choice
Я знаю, как сделать это с помощью fork(), если.. еще, но это не главное. Я ищу какой-то пульт дистанционного управления. Это возможно? Спать с ним долгое время может быть решением?
2 ответа
Я предполагаю, что Linux, но процесс должен быть похож на другие операционные системы. Вы хотите посмотреть в kill()
объявленная функция обычно объявляется в signal.h
заголовочный файл Это позволит вам отправить сигнал на определенный PID от вашего убийцы зомби. Самый простой подход - послать вашему зомби сигнал об уничтожении (SIGKILL
). SIGKILL
не может быть пойман или проигнорирован, и немедленно убить процесс мертвым.
Если вам нужно сделать некоторую очистку в процессе зомби, вы можете создать обработчик сигнала с signal()
функция. Это позволит вам указать функцию для вызова, когда процесс получает сигнал. Эта функция будет реализовывать ваш код очистки, а затем exit()
,
В Linux ваша оболочка должна иметь команду kill, которая имитирует функциональность kill()
, Синтаксис обычно kill -s 9 PID
, Это отправит сигнал SIGKILL (сигнал № 9) на PID процесса.
Я надеюсь, что этот ответ подталкивает вас в правильном направлении.
Когда вы разветвляете процесс, fork возвращает 0 в дочернем процессе и идентификатор дочернего процесса в родительском. Вы можете сохранить их в массиве, записать их в файл или записать в канал и не "открывать" другой конец, пока он вам не понадобится.