Что точно происходит, когда встроенная команда выполняется в оболочке?

Нет, Debian и Ubuntu не двоичные совместимый. Debian и Ubuntu могут использовать различные компиляторы с другим ABI, различными версиями ядра, различными библиотеками, различные пакеты/версия и т.д. Как не все пакеты Ubuntu находятся в Debian (и наоборот) deb пакеты может также зависеть от неустанавливаемых версий.

Redhat и CentOS совпадают с CentOS, в основном получает все исходные пакеты от Redhat и компилирует их. Но Ubuntu действительно намного больше нравится обеспечивать собственные пакеты, пакет собственное программное обеспечение, используйте более старые или более новые версии восходящего программного обеспечения, исправьте ошибки и т.д.

Таким образом, не технически они не двоичные совместимый.

Я могу, заставил его звучать хуже, чем это в действительности. НО важно понять, что отношения между Ubuntu и Debian - Ничто как между rhel и CentOS

3
21.07.2017, 21:35
3 ответа

Для Вашего конкретного примера существует функция cd_builtin, который определяется в builtins/cd.def (в исходном коде удара). Это обычно делает a cd путем вызывания той функции. Но это может разветвиться сначала при использовании его в конвейере — например, cd / | echo ветвления и вызовы cd_builtin в ребенке. Можно также заметить это тем, как каталог на самом деле не изменяется:

anthony@Zia:~$ cd /tmp/
anthony@Zia:/tmp$ cd / | echo -n
anthony@Zia:/tmp$ cd /
anthony@Zia:/$ 

Заметьте, как каталог только изменяется, когда я не передаю по каналу от cd.

6
27.01.2020, 21:08

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

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

Я не думаю ни один из общих потоков использования оболочек в их внутреннем дизайне. Возможности Shell довольно связываются традиционной single-thread-per-process моделью Unix, нет никакой проблемы в дизайне оболочки, который решили бы потоки.

Очень вероятно, что каждое встроенное реализовано функцией на некотором уровне в исходном коде оболочки.

4
27.01.2020, 21:08

Я думал бы, что они работают как функция в течение bash исполняемый файл. Существует комментарий в Усовершенствованном Руководстве по созданию сценариев Bash, которое указывает это следующим образом:

выборка

Встроенной является команда, содержавшая в комплекте инструментальных средств Bash, буквально встроенном. Это или по причинам производительности - builtins, выполняются быстрее, чем внешние команды, которые обычно требуют разветвления прочь 1 отдельный процесс - или потому что конкретный встроенный прямой доступ потребностей к внутренностям оболочки.

3
27.01.2020, 21:08
  • 1
    , но здесь мы не создаем новый процесс, мы создаем новый поток, выполнение которого быстрее, чем создание процесса. я соглашаюсь, что реализация функции быстрее, чем создание потока. Но сценарий здесь - это в течение времени выполнения: создание процесса> распараллеливает создание> функциональный вызов. Мы не можем быть уверены, является ли это потоком или функциональным –  corneliusfelix 18.06.2013, 23:21
  • 2
    я думаю, что Вы становитесь одержимыми семантикой. Я вполне уверен, они обслуживаются вызовами функции ударом. Мое обоснование состоит в том, что, если я слежу за своим процессом удара с помощью инструмента, такого как htop, настроенный для проявления потоков, нет никого, когда я выполняю различные встроенные команды для избиения. –  slm♦ 18.06.2013, 23:27
  • 3
    хорошо благодарит Вас за разъяснение, я проверю его –  corneliusfelix 18.06.2013, 23:29

Теги

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