Зомбі в баш


11

Баш, здається, не створює зомбі. Схоже, що процеси одразу ж пожинають, коли їх вбивають.

Чи можу я змусити баш зробити зомбі?


Чому я прошу:

Я хотів би мати можливість безпечно вбити дитячий процес або безпечно kill -9його, якщо він не загине протягом певного проміжку часу, але я не хочу випадково зачинити процес, який не є моїм дочірнім процесом. Зомбі-процеси зазвичай роблять це дуже легко та безпечним для перегонів.


1
Можливо, інша ідея ... якщо ви дійсно хочете захиститись від вбивства зовнішніх процесів, перегляньте групи. Зателефонуйте unshareстворити простір імен PID, щоб зсередини цього дерева процесів зовнішні процеси були ізольованими та недоступними.
— Оріон

Використовуйте контроль за роботою (як у, kill -KILL %nде nномер роботи тощо), а не намагатися його обійти.
— Номінальна тварина

Чудове запитання! Альтернативний підхід до "чому ти питаєш", хоча: ти розглядав timeoutкоманду?
— Wildcard

Відповіді:


13

Щоб зробити процес зомбі:

$ (sleep 1 & exec /bin/sleep 10)

Це замінить оболонку, яка працює sleep 1з /bin/sleep 10цим, не буде знати, що sleep 1процес закінчився, тому створивши зомбі протягом 10 секунд.


Я не впевнений, що ви очікуєте від вбивства зомбі. Процес зомбі вже був мертвим, його не можна вбити.

Насправді ви можете змусити процесів зомбі зникнути, але, вбивши його батьків, а не самих процесів зомбі.


Повторно отримані PID піддаються переробці. Сенс зомбі полягає в тому, що вони резервують PID, поки батько не визнає смерть своєї дитини, чекаючи на неї. Без цього вбивство піда може призвести до випадкової жертви.
— PSkocik

1
У C ви можете бути впевнені, що не зробите випадкової жертви, коли вбите свою дитину, оскільки поки ви не дочекалися цієї дитини, PID цієї дитини не може бути перероблений. Я хотів би мати таку ж гарантію в оболонці.
— PSkocik

3

Не така цікава відповідь:

$ (A=$BASHPID && ( kill -STOP $A ))

[1]+  Stopped                 ( A=$BASHPID && ( kill -STOP $A ) )

$ ps -C bash
  PID TTY          TIME CMD
29453 pts/0    00:00:00 bash
29593 pts/0    00:00:00 bash
29594 pts/0    00:00:00 bash <defunct>

Як це процес зомбі? Це просто зупинилося. Також $BASHPIDє $$я думаю.
— Gabor Csardi

$BASHPID це НЕ те ж саме , що $$. Спробуйте наступний код: echo $$ $BASHPID ;echo $(echo $$ $BASHPID). Ви можете знайти більше інформації в man bash.
— Олексій Барановський
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.