LINUX.ORG.RU
решено ФорумAdmin

Есть ли в кунг-фу bash приёмы против захвата «fork: There is not enough memory available» ?

 ,


0

1

Доброго времени суток

Сабж. Есть сервер, на него можно зайти с локальной консоли. Но память закончилась ( от слова «совсем» ) и на любую команду получаю

-bash-3.2# ls
-bash: fork: There is not enough memory available now.
-bash-3.2# svmon -G
-bash: fork: There is not enough memory available now.
-bash-3.2# swap -l
-bash: fork: There is not enough memory available now.

Можно ли что-то сделать исключительно встроенными командами bash?

Частный случай: можно ли в пустом bash изобразить аналоги cat и kill? ( желательно ещё ls, но его кое-как можно заменить автодополнением по табу )

З.Ы. не linux. aix

Правильные ответы:

★★★★★

Последнее исправление: router (всего исправлений: 6)

не linux. aix

ссзб

anonymous
()

Ты можешь попробовать «exec kill ...». Но

  • возможно памяти не хватит даже на exec и получится EPIC FAIL,
  • возможно это прокатит всего один раз и второй раз ты зайти вообще не сможешь, так что целиться kill'ом надо хорошо

=)

Deleted
()
Ответ на: комментарий от anonymous

man builtins

это пакет с отдельными утилитами, на запуск которых не хватит памяти

man proc

ну я как бы знаю про неё. Именно поэтому мне нужны аналоги cat и kill на чистом bash, а процесс я и сам в /proc найду

/proc/sysrq-trigger например

hmc, например. перезагрузить не проблема

ссзб

:D

router ★★★★★
() автор топика

ребут не вариант?

MikeDM ★★★★★
()
Ответ на: комментарий от anonymous

блин, смотрю в монитор и вижу «binutils». Перерыв нужен

router ★★★★★
() автор топика

Смутно помню, что был такой вопрос на яндекс олимпиаде. Нашёл

11. На сервере запустили форк-бомбу. У Вас есть открытая ssh-сессия на машину. Серверу в настоящий момент настолько плохо, что нельзя даже запустить ps, так как закончились pid-ы. Родительский и дочерние процессы форк-бомбы называются someprogram.bin Каким образом можно убить все процессы someprogram.bin?

Ответ:

exec busybox/python, откуда в цикле убить все процессы не порождая новых процессов.

к сожалению, питона и busybox нет. Можно запустить perl, но работать с ним интерактивно я не умею.

Тупо перезагрузил lpar. Вопрос становится теоретическим

router ★★★★★
() автор топика
Ответ на: комментарий от router

Вместо cat (хотя вроде был способ с перенаправлениями, который проще):

while read l; do echo "$l"; done < file
А kill встроенный есть (help kill).

xaizek ★★★★★
()
Ответ на: комментарий от anonymous

Спасибо, builtin именно то, что нужно

router ★★★★★
() автор топика
Ответ на: комментарий от entefeed

О, похоже, а я пробовал просто < file, думал как-то так. Спасибо, освежили память.

xaizek ★★★★★
()
Ответ на: комментарий от router

почему неправ? судя по strace там вызывается clone()

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.