Система полностью простаивает, если загружается с параметром ядра INIT = / bin / sh, а затем немедленно завершается из оболочки?

Пожалуйста, убедитесь, что вы не удалили "\" в предыдущей строке /usr/share/zsh/functions/Completion/Unix/_ssh, при внесении изменений:

_wanted hosts expl 'remote host name' \
 compadd -M 'm:{a-zA-Z}={A-Za-z} r:|.=* r:|=*' "$@" $config_hosts

Я сделал это (удалил символ продолжения "\" в строке wanted), и получил точно такую же ошибку, как у вас:

_all_labels:39: command not found: -J

Другая возможность заключается в том, что вы могли случайно поставить дополнительный пробел после "\", тем самым отключив его.

Что касается второй части вашего вопроса, я считаю, что правильный синтаксис:

zcompile Unix.zwc Unix/*

(скомпилировать все в Unix/ в Unix.zwc)

2
25.04.2017, 20:02
3 ответа

Я удивлен. Насколько я понимаю, завершение PID 1 вызывает панику ядра . Я могу рассказать вам, что произошло в том случае.

Режим паники можно настроить. С параметрами по умолчанию вы получите цикл , который выглядит именно так, как вы говорите.

Используемая функция задержки задокументирована как «ожидание занятости -». Не ожидается переход в режим энергосбережения -, сохраняющий состояния сна ЦП, используемые при нормальном бездействии ОС.

Если вы посмотрите на след, напечатанный паникой, я думаю, вы увидите, что все это происходит внутри sys_exit(). Я думаю, что технически PID 1 не уничтожается, он просто никогда не возвращается после выполнения этого системного вызова. Любые другие процессоры останавливаются первыми.

(Существует что-то, называемое "загрузочным бездействующим потоком" . Я не вижу его участия в этом процессе. AFAICT вы никогда не сможете увидеть эту ветку. И если вы хотите понимать это как бездействующий поток, вам также нужно спросить, что обеспечивает бездействующий поток для других процессоров, когда они подключены к сети ).

3
27.01.2020, 21:59

Это неправда, что системе нечего делать, если не запущен процесс на уровне пользователя. В системе есть куча потоков ядра, которые запустило само ядро. В основном они спят, но периодически просыпаются, чтобы выполнить свою задачу. Потоки ядра выполняют только код пространства ядра, т.е. у них нет никаких отображений памяти на уровне пользователя. Они являются отдельными процессами, поскольку планируются независимо друг от друга и имеют уникальные идентификаторы процессов.

Если вы выполните команду ps aux, вы сможете распознать потоки ядра по квадратным скобкам, окружающим имя потока.

2
27.01.2020, 21:59

В системе нет запущенных процессов. Итак, нет занятого цикла, как вы написали (это было бы 100% ЦП). Ядро по-прежнему может обрабатывать прерывания, но это не процесс. ЦП будет бездействовать.

Подробности можно найти здесь, в исходниках kernel_init(), программа выполняется аналогично execve(). Это также означает, что выполнение не возвращается (см. execve(3p)).

0
27.01.2020, 21:59

Теги

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