Any_Key
написал 24 июня 2006 года в 18:46 (1438 просмотров)
Ведет себя
как мужчина; открыл 31 тему в форуме, оставил 325 комментариев на сайте.
У меня приятель учится на программера им задали написать программу которая форкает а потом дитё убивает родителя.
Мне стало интересно.
Интересовался я долго и вот что получилось
#include #include #include #include #include int main(){ if (!fork()) { kill (getppid(),SIGKILL); exit (0); } else { wait (NULL); } exit (0); }
Собственно интересует, а как это же можно сделать по другому? (Элегантнее?)
ЗЫ. Это мне интересно, приятель пусть сам мучается.
Последние комментарии
- OlegL, 17 декабря в 15:00 → Перекличка 21
- REDkiy, 8 июня 2023 года в 9:09 → Как «замокать» файл для юниттеста в Python? 2
- fhunter, 29 ноября 2022 года в 2:09 → Проблема с NO_PUBKEY: как получить GPG-ключ и добавить его в базу apt? 6
- Иванн, 9 апреля 2022 года в 8:31 → Ассоциация РАСПО провела первое учредительное собрание 1
- Kiri11.ADV1, 7 марта 2021 года в 12:01 → Логи catalina.out в TomCat 9 в формате JSON 1
ecobeing.ru
Экология и вегетарианство на благо всем живым существам Планеты.
Если именно убивает, то наверное, как-то так.
Просто обычно родитель сам умирает:
PS Это я попробовал перенести на C Perl-овую идиому
, но она тут, увы, не работает:
Ну, в любом случае что-то вроде
Не, нужен был именно форк с комплексом Эдипа.
Как вариант наверное можно ещё handler в родителя вставить. Чтоб мог воскликнуть «помогите убивают»
Страсти-мордасти прям…
А вобще, если мне не изменяет память, при убийстве процесса убиваются все его дочерние процессы. Т.е. если мы прибьем родителя — то и сами умрем. Такая вот грустная история, хныык :(
чёт я не понял… чем тебе этот вариант не нравиться?
Если парент имеет X окошко, то можно закрыть это окно. или убить X.
Но это для парента со специфическими свойствами. а других способов общего назначения я, как-то и не вижу…
Хотя имея права рута, можно поразвлекаться с /dev/mem (главное не испортить, случайно, себя, init или ядро породившее init). Есть ещё файлик /proc//mem, зачем он — не знаю, но возможно позволит из без рута насрать в память папы.
Но зачем нужны эти извраты, когда есть kill?
изменяет ;) С кем интересно.
2 Longobard
Нет, если дитю есть чем заняться то оно благополучно переживёт родителя, так рождаются демоны.
2 rgo
эээ проблема в том что я-то совсем не программист, и Си практически не знаю, просто искал может есть еще какой способ который я упустил, а варианты с ковырянием в /dev/mem — действительно изврат.
Да, покурил Стивенса, я неправ :)
ык. курил говоришь? а стивенс ничего не говорил про сигнал который чайлд ловит после убийства папы? Чтоб проверить, не умрёт ли, случайно чайлд следом за парентом, я скормил gcc
Дык usleep, по-ходу дела, прерывался сигналом. Вот каким сигналом? SIGCHLD?
SIGCHLD — наоборот, оповещает об умершем сыне.
Попробуй узнать о сигнале по exit code, который равен 128+номер сигнала.
rgo, у меня этот код отрабатывает на ура. Ищи проблемы в консерватории ;)
угу, нашёл.
точно: никаких сигналов не ловит и висит в usleep ровно столько, сколько сказано, безо всяких EINTR.
я просто перепутал микросекунды с миллисекундами :).