Среда суб-оболочки не должна находиться в отдельном процессе, ей просто нужно дублировать текущую среду выполнения. В ksh93
это делается с помощью механизма виртуальной суб-оболочки
, который не вызывает fork ()
.Это делает ksh93 очень быстрым на архаичных платформах, таких как Win-DOS
, поскольку Win-DOS
чрезвычайно медленен при разветвлении.
sh -c cmd
на другой стороне создает новый процесс с оболочкой по умолчанию, которая не обязательно должна совпадать с вашей текущей интерактивной оболочкой.
Даже если sh
и ваша текущая оболочка идентичны, это не дублирует среду выполнения и, следовательно, не создает суб-оболочку
.
Для многих демонов в любой момент времени в системе должен работать только один экземпляр демона. В этом случае демон обычно хранит свой PID в хорошо известном каталоге (в Linux в настоящее время /run
, ранее /var/run
), чтобы указать, что экземпляр демона это работает.
Если вы попытаетесь вызвать второй экземпляр такого демона, вновь вызванный демон проверит существующую запись (представьте, что это файл блокировки) в папке /run
и, если найдет, завершит работу.
Если демон перезапускается, PID нового экземпляра записывается в файл. Новый экземпляр получает свой собственный PID, нет возможности запустить процесс с заданным PID.
Файл PID также используется для определения того, какой процесс нужно убить, чтобы остановить демон.