login
завершается, когда его дочерний элемент (, зарегистрированный -в пользовательской оболочке входа в систему ), завершается. Он мог бы даже exec
дочерний элемент не разветвлять, заменяя себя, но ему нужно позаботиться об очистке сеанса PAM -, поэтому вместо этого он должен ждать своего дочернего элемента. После завершения getty
илиinit
(в более общем случае процесс инициализации )выполняет дополнительную очистку -до(utmp
и т. д. )и ждет нового входа в систему (, если getty
заменено сам с login
или завершается, когда login
завершается, процесс инициализации запустит новыйgetty
).
Вы правы, по крайней мере, под Linux login
обычно используется только на виртуальных консолях (или реальных терминалах, подключенных через последовательные устройства ). Менеджеры графического отображения реализуют свои собственные механизмы входа в систему. Вы можете запустить login
внутри оболочки входа в систему, например. в эмуляторе терминала, с небольшой осторожностью(exec login
); давным-давно для смены пользователей использовался рекурсивный login
, аналог su
в наши дни.
Обратите внимание, что некоторые оболочки имеют команду logout
, которую предполагается использовать вместо exit
для выхода из оболочки входа в систему; в таких оболочках exit
обычно не выходит из оболочки входа в систему.
Я исправил это с помощью sdnotify -прокси . Я изменил свою стартовую команду для этого:
/usr/local/bin/sdnotify-proxy /run/my-sd.sock \
/usr/bin/docker run -t --name my-container --volume /run/my-sd.sock:/run/my-sd.sock \
--env NOTIFY_SOCKET=/run/my-sd.sock --privileged my