Почему Bash запускает сценарии в подоболочках?

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

grub2-set-default 1

Однако, глядя на вывод предыдущей команды:

awk -F\' '$1=="menuentry " {print $2}' /etc/grub2.cfg

Результаты в:

Red Hat Enterprise Linux Server (3.10.0-693.el7.x86_64) 7.3 (Maipo) <-- Entry 0

Red Hat Enterprise Linux Server (3.10.0-514.el7.x86_64) 7.3 (Maipo) <-- Entry 1

Установка ядра по умолчанию на запись 1 загрузит более старое ядро, поэтому вместо использования

grub2-set-default 1

Используйте:

grub2-set-default 0
0
30.04.2020, 14:54
1 ответ

На оболочку, которая изначально называлась «пользовательский интерфейс» системы, была возложена ответственность за выполнение программ (или задач ). Чтобы вызвать задачу, оболочка, в свою очередь, попросит ядро ​​выполнить задачу. Ядро управляет памятью, которую будет использовать задача, и разрешениями на чтение или запись в файлы. Чтобы попросить ядро ​​«выполнить» программу, основной метод состоит в том, чтобы разветвить новую задачу (, которая дает ей новый PID (номер процесса )), а затем выполнить новая программа внутри этого нового PID. Ядро получит список аргументов:

int execve(const char *filename, char *const argv[], char *const envp[]);

В основном просит ядро ​​выполнить filenameс аргументами argv[]. Ядро делает то, что его просят, и когда программа завершает работу, управление возвращается родительскому процессу.

Взяв оболочку в качестве исполнителя программ, очевидно, что она может также выполнять текстовые файлы, понятные некоторым интерпретаторам. Это механизм шебанга #! /interpreter, который понимает и ядро.

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

Ожидается, что любая программа, выполняемая внутри другого PID, не загрязняет родительский PPID. То есть :изменения в одном PID не влияют на родительский PID.

Таким образом, когда выполняется "скрипт", он (обычно )получает новый PID. Называется ли он подоболочкой или дочерней оболочкой, это иногда сбивает с толку, но важно то, что он работает внутри другого PID. Обычно это дочерний процесс (PID ).

0
28.04.2021, 23:17

Теги

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