Как сделать так, чтобы оболочка отображалась в моем собственном дистрибутиве ( linux)? [закрыто]

Возможно, его нет, потому что это было бы не-POSIX.

Дальнейшее чтение:

Конечно, zsh может реализовать расширение, но если другие приложения не могут читать переменные, они имеют ограниченное применение.

Переменные оболочки и переменные среды отличаются тем, что переменные оболочки могут храниться в памяти интерпретатора оболочки (и они ограничены только самим интерпретатором оболочки), в то время как переменные среды экспортируются - становятся доступными для использования другими программами. Именно поэтому в игру вступают стандарты (такие как POSIX).

5
13.02.2017, 11:42
3 ответа

Хм. Это не должно быть сложным для достижения, но это также очень сложно :)

Вы можете просто сделать то, что предложил Александр ( init = / bin / bash ), и все будет в порядке.

Процесс инициализации - это то, что вызывает ядро, и он запускает все вашего пользовательского пространства. Терминал входа в систему включен. Если ваш init просто порождает этот терминал bash, все в порядке. Но если этот терминал выйдет из строя или завершится, init должен очиститься. Если некоторые процессы, которые вы запускаете с терминала, умирают, вам необходимо очистить их. Если они умрут, то их детям потребуется новый родительский процесс, это будет ваш init.

Я настоятельно рекомендую выделить 10 минут, чтобы прочитать это, это очень удобный обзор того, что делает init :

http://tilde.town/~elly/userland.txt

Тогда вы подойду ближе, чтобы понять, что влечет за собой запуск вашего собственного init.

В соответствующей части этой ссылки говорится:

Нам нужно сделать только одно: предоставить исходный двоичный файл для запуска по любому из этих путей: / sbin / init, / etc / init , / bin / init или / bin / sh. Этот процесс (init) запускается как pid 1.

Процесс init должен делать две вещи:

  • Никогда не завершать работу (если init завершается, ядро ​​паникует)

  • Получать зомби-процессы

Остальные процессы text затем реализует простой init.

8
27.01.2020, 20:32

«терминал» (физический компьютер) и «bash» (оболочка) совершенно разные. Я не совсем уверен, о чем вы спрашиваете, но вы можете добавить init = / bin / bash в командную строку ядра, чтобы загружаться прямо в bash.

4
27.01.2020, 20:32

bash не терминал, а оболочка.

Процесс init , после завершения процесса загрузки и если машина работает только на текстовом уровне запуска (то есть без X Windows), в конечном итоге вызывает getty , который, в свою очередь, вызывает логин . Это процесс, отвечающий за отображение приглашения на вход и разрешение пользователям входить в систему. Это то, что происходит во всех дистрибутивах Linux.

Вам нужно просто определить bash как оболочку входа по умолчанию для пользователей (при условии, что вам нужна многопользовательская среда).

4
27.01.2020, 20:32

Теги

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