Пожалуйста, убедитесь, что вы не удалили "\" в предыдущей строке /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)
Я удивлен. Насколько я понимаю, завершение PID 1 вызывает панику ядра . Я могу рассказать вам, что произошло в том случае.
Режим паники можно настроить. С параметрами по умолчанию вы получите цикл , который выглядит именно так, как вы говорите.
Используемая функция задержки задокументирована как «ожидание занятости -». Не ожидается переход в режим энергосбережения -, сохраняющий состояния сна ЦП, используемые при нормальном бездействии ОС.
Если вы посмотрите на след, напечатанный паникой, я думаю, вы увидите, что все это происходит внутри sys_exit()
. Я думаю, что технически PID 1 не уничтожается, он просто никогда не возвращается после выполнения этого системного вызова. Любые другие процессоры останавливаются первыми.
(Существует что-то, называемое "загрузочным бездействующим потоком" . Я не вижу его участия в этом процессе. AFAICT вы никогда не сможете увидеть эту ветку. И если вы хотите понимать это как бездействующий поток, вам также нужно спросить, что обеспечивает бездействующий поток для других процессоров, когда они подключены к сети ).
Это неправда, что системе нечего делать, если не запущен процесс на уровне пользователя. В системе есть куча потоков ядра, которые запустило само ядро. В основном они спят, но периодически просыпаются, чтобы выполнить свою задачу. Потоки ядра выполняют только код пространства ядра, т.е. у них нет никаких отображений памяти на уровне пользователя. Они являются отдельными процессами, поскольку планируются независимо друг от друга и имеют уникальные идентификаторы процессов.
Если вы выполните команду ps aux
, вы сможете распознать потоки ядра по квадратным скобкам, окружающим имя потока.
В системе нет запущенных процессов. Итак, нет занятого цикла, как вы написали (это было бы 100% ЦП). Ядро по-прежнему может обрабатывать прерывания, но это не процесс. ЦП будет бездействовать.
Подробности можно найти здесь, в исходниках kernel_init(), программа выполняется аналогично execve()
. Это также означает, что выполнение не возвращается (см. execve(3p)
).