Ядро ЯВЛЯЕТСЯ программой, как и любая другая. По умолчанию ядро Linux пытается получить доступ к файловой системе, однако это поведение может быть тривиально устранено модификацией ядра (, на самом деле просто добавлением функции «arch _call _rest _init ()» ). Для выполнения «полезной работы» мы ожидаем, что разработчик может включить потоки ядра (kthreads ), возможно, в пользовательский драйвер,для выполнения некоторой желаемой рабочей нагрузки по инициализации и типу приложения. Ядро Linux уже содержит множество k-потоков, но в основном для выполнения вспомогательной работы по отношению к ядру или драйверам. API-интерфейсы, доступные в контексте ядра, сильно отличаются от доступных в пользовательском -пространстве Linux. Большая часть функциональных возможностей системных вызовов стала бы бесполезной в сценарии без файловой системы -.
Да, Linux по умолчанию требует доступа к файловым системам. Нет, модифицированное ядро, безусловно, может выполнять полезную работу без какой-либо файловой системы. Практическое использование Linux без файловой системы, по IMO, довольно ограничено, но не равно нулю. FWIW, в прошлом многие ядра -реального времени были встроены в то же -пространство имен и двоичные файлы, что и приложения RT.
OpenBSD не поддерживает интерпретаторы, которые сами по себе являются скриптами в shebangs. Интерпретаторы должны быть настоящими двоичными файлами.
Попытка выполнить ваш script
завершается ошибкой с ENOEXEC
, и оболочка возвращается к запуску /bin/sh
со сценарием в качестве первого аргумента, как описано в документации.
Вы можете проверить это, попробовав запустить свой скрипт напрямую через execve(2)
, а не через оболочку, Perl exec
, xargs(1)
, env(1)
, execvp(3)
или какую-либо другую оболочку, которая эмулирует поведение оболочки.
Если это не задокументировано, вы можете просто посмотреть исходный код .
В любом случае, OpenBSD похожа на большинство других систем, кроме Linux; Насколько мне известно, только Linux поддерживает другие скрипты в качестве интерпретаторов, вплоть до 4 уровней, после чего execve
завершится ошибкой с ELOOP
.