Намеренная паника ядра в соответствии с Linux?

Вы пропускаете некоторые двойные кавычки (всегда помещаемые двойные кавычки вокруг подстановок переменных $foo и замены команды $(foo), если Вы не знаете, почему Вы можете безопасно оставить их и должны оставить их). Но это не вся проблема.

if [ ! -d $START ]

должен быть if [ ! -d "$START" ].

DIRS=$(find "$START" -type d)

На данном этапе DIRS содержит название каталога запуска и его подкаталогов рекурсивно, с промежуточными новыми строками. Таким образом, если у Вас есть какое-либо имя каталога, которое содержит новую строку, Вы проиграли: невозможно знать, какие новые строки прибыли из имени каталога и которые были разделителями. Если Вы знаете, что нет никаких новых строк в именах файлов, можно проанализировать вывод find, но как Вы знали бы?

Между прочим, нормально не иметь двойные кавычки вокруг $(…) здесь, потому что это - переменные присвоения, и замены в присвоениях неявно защищены. Однако отметьте это export DIRS=$(…) так же не защищен. Лучше всего для использования кавычек, если Вы не бегло говорите на сценариях оболочки и так являетесь всеми людьми, которые поддержат Ваш сценарий.

for d in $DIRS

Это - то, где Вы проигрываете: Вы хотите разделить $DIRS в слова, таким образом, Вы не можете поместить двойные кавычки, но Вам нужны двойные кавычки потому что $DIRS имеет все элементы, связанные вместе, и имена файлов в пробелах были бы разделителями при отъезде их, закрыл кавычки.


Обычно, когда Вы используете find, необходимо заставить его вызвать команду обработки, с -exec опция. Если у Вас нет трудных средств управления на именах файлов, не анализируйте вывод find: это неоднозначно.

find "$START" -type d -exec sh -c '
    echo "$0 directory has $(find "$0" -maxdepth 1 -regex ".*\\." -type f -printf \\n | wc -l) files whose name ends with ."
' {} \;

Отметьте снова во встроенном find управляйте этим при парсинге вывода find, Ваше количество будет выключено, если какое-либо имя файла будет содержать новую строку.

2
02.08.2013, 21:39
3 ответа

использование уничтожает

Я думаю, что Вы могли попробовать следующее:

$ kill -6 1

Это отправляет сигнал № 6 обработать № 1 (процесс init). Если Вы читаете в странице справочника сигналов: "человек 7 сигналов":

   Signal     Value     Action   Comment
   -------------------------------------------------------------------------
   SIGHUP        1       Term    Hangup detected on controlling terminal
                                 or death of controlling process
   SIGINT        2       Term    Interrupt from keyboard
   SIGQUIT       3       Core    Quit from keyboard
   SIGILL        4       Core    Illegal Instruction
   SIGABRT       6       Core    Abort signal from abort(3)

Можно узнать, как процесс хочет обработать различные сигналы (cat /proc/$PID/status). Посмотрите это Вопросы и ответы U&L для большего количества информации: Как я могу проверить то, что сигнализирует, что процесс слушает?.

переполнение памяти

Другой метод должен переполнить памяти для стимулирования паники ядра. Сначала необходимо будет отключить подкачку.

$ swapon -s
Filename                Type        Size    Used    Priority
/dev/mapper/VolGroup00-LogVol01         partition   14352376    3177812 -1

$ swapoff /dev/mapper/VolGroup00-LogVol01

Теперь использовать всю память:

$ for r in /dev/ram*; do cat /dev/zero > $r; done

Ссылки

6
27.01.2020, 21:53
  • 1
    Странный. В первый раз это, казалось, "приостанавливало" Xorg. Моя музыка остановилась, и я видел, что cli войти в Вас обычно добираются при изменении TTYs. Я вошел в систему и затем переключился назад на tty7 (Xorg) и во второй раз, когда он сделал то же самое как отзывающийся эхом к /proc/sysrq-trigger. Я предполагаю, что необходимо быть в tty для наблюдения информации об ошибке. И для цикла, который использует всю память, cat получает ошибку при записи, говоря, что устройство полно, но ядро должно заботиться о нем, becuase, если я проверяю, что моя RAM, только ~300MB используется. –  tkbx 02.08.2013, 21:54
  • 2
    На самом деле PID 1 явно защищен от сигналов, которые он не настраивается для ловли. Посмотрите, что unix.stackexchange.com/questions/7441 –  Jander 02.08.2013, 21:57
  • 3
    @Jander - спасибо. Существует ли способ получить список сигналов, что init является установкой для ловли? –  slm♦ 02.08.2013, 22:02

Некоторые аппаратные средства Intel имеют кнопку NMI (Немаскируемое прерывание), которое сразу вызовет панику, если Вам включат сторожевой таймер NMI. Существует пара других способов заставить сторожевой таймер NMI паниковать также

0
27.01.2020, 21:53

Можно попробовать sudo kill -SEGV 1. Это сразу разрушит init, как будто был отказ MM (ядро, эквивалентное из нарушения сегмента).

1
27.01.2020, 21:53

Теги

Похожие вопросы