Bash: нет управления работой в этой оболочке


8

У меня минимальная система Linux.

init /bin/bash, только минимальный набор библиотек /lib/, /dev/заполнен статически, демоны не запущены (udev, ..)

Когда запускается bash, я получаю следующую ошибку:

bash: cannot set terminal process group (-1) inappropriate ioctl for device
bash: no job control in this shell

Когда я запускаю bash с помощью strace, я получаю следующий вывод:

rt_sigprocmask(SIG_BLOCK, NULL, [], 8)  = 0
open("/dev/tty", O_RDWR|O_NONBLOCK)     = -1 ENXIO (No such device or address)
ioctl(0, SNDCTL_TMR_TIMEBASE or TCGETS, {B38400 opost isig icanon echo ...}) = 0

....

readlink("/proc/self/fd/0", "/dev/console"..., 4095) = 12
stat("/dev/console", {st_mode=S_IFCHR|0600, st_rdev=makedev(5, 1), ...}) = 0
open("/dev/console", O_RDWR|O_NONBLOCK) = 3

Похоже, что Bash не может открыть /dev/tty. Но /dev/ttyсуществует в /dev/и имеет правильные разрешения:

ll /dev/tty*
crw-rw-rwT 1 root root 5, 0  2014-Sep-29  23:39:47  dev/tty
crw------T 1 root root 4, 0  2015-Dec-23  20:10:18  dev/tty0
crw------T 1 root root 4, 1  2015-Dec-23  20:10:18  dev/tty1

Почему нельзя bashоткрыть /dev/tty? И что означает ENXIOошибка?

Ответы:


4

init is /bin/bash

Как я сказал на сайте https://unix.stackexchange.com/a/197472/5132 , init=/bin/shфайловые системы «API» не монтируются, происходит сбой неуклюже, без сброса кэша при вводеexit ( https: //unix.stackexchange .com / a / 195978/5132 ) и, как правило, предоставляет (супер) пользователю возможность вручную выполнять действия, которые делают систему минимально пригодной для использования.

Одним из таких действий (если вы хотите использовать оболочку управления заданиями, как вы, очевидно, делаете), является получение управляющего терминала . /dev/ttyне фактическое оконечное устройство. Это устройство, которое перенаправляет на любой управляющий терминал процесса открытия. Если у него его нет , поскольку процесс № 1 не начинается с (и обычно все время, когда программа реального администратора системы запускается как процесс № 1), то открытие устройства завершается неудачно.

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

дальнейшее чтение


Спасибо. Не могли бы вы пояснить, как я могу «настроить управляющий терминал / приобрести управляющий терминал»?
Мартин Вегтер

@MartinVegter Используйте инициацию BusyBox.
Жиль "ТАК - перестать быть злым"
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.