Детали ответа зависят от конкретной операционной системы и оболочки, о которой вы говорите.
Пользовательские программы используют общую среду, которая зависит от ОС (например, файловые дескрипторы 0, 1, 2 (стандартный, стандартный, стандартный)).
Это не совсем правильно. Например, в Linux:
Переменные среды не являются общими. Переменные копируются из родительского объекта в дочерний, когда он создается, и затем они не зависят от. Это, когда вы изменяете переменную окружения в потомке, родитель не видит его. И наоборот.
Файловые дескрипторы не являются общими. Некоторые файловые дескрипторы клонируются в дочернем процессе, поэтому они ссылаются на один и тот же источник или место назначения для байтов. Однако файловые дескрипторы функционируют независимо. Например, если родительский и дочерний элементы имеют stdin
, указывающие на один и тот же входной файл, когда родительский элемент выполняет seek
, это не влияет на дочерний элемент или наоборот.
Другими словами, относится ли «оболочка» к среде выполнения, предоставляемой ОС?
Что происходит (в Linux / UNIX / OSX), что оболочка 1 выполняет fork
и exec
для создания дочернего процесса, выполняющего команду, запрошенную пользователем. Системный вызов fork
создает дочерний процесс, который является клоном родительского процесса (оболочки). Дочерний процесс выполняет некоторую настройку, а затем вызывает exec
, чтобы начать выполнение пользовательской команды.
Перед выполнением дочерний процесс устанавливает файловые дескрипторы, которые команда будет использовать;например, стандартный ввод, стандартный вывод и стандартный вывод. Аргументы команды и копия переменных среды оболочки передаются через границу exec
через параметры syscall.
Однако это также может быть сделано прикладной программой без помощи оболочки .
Итак, ответ на ваш вопрос - нет.
Обратите внимание, что оболочка является программой, а не частью ядра операционной системы. Действительно, нет ничего особенного (то есть привилегированного) в программе оболочки. Вы можете написать один самостоятельно, если хотите.
... но как насчет других процессов, которые запускаются с помощью средства запуска или ярлыка на рабочем столе, или даже тех, которые автоматически запускаются ОС?
Это зависит. Они часто используют оболочку, потому что процесс запуска часто включает в себя анализ интерпретирующих перенаправлений оболочки, расширений переменных среды и так далее. Но они не обязательно должны.
1 - Исключением является случай, когда вы exec some-command ...
из оболочки. В этом случае оболочка не fork
дочерний процесс. Вместо этого он просто использует системный вызов exec
для замены исполняемого файла оболочки на исполняемый файл запрошенной программы.