bash: no hay control de trabajo en este shell

8

Tengo un sistema Linux mínimo.

init es /bin/bash, solo un mínimo de bibliotecas /lib/, /dev/se llena estáticamente, no se ejecutan demonios (no udev, ..)

Cuando comienza bash, recibo el siguiente error:

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

Cuando comienzo bash con strace, obtengo el siguiente resultado:

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

Parece que bash no puede abrirse /dev/tty. Pero /dev/ttyexiste /dev/y tiene los permisos correctos:

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

¿Por qué no se puede bashabrir /dev/tty? ¿Y qué significa el ENXIOerror?

Martin Vegter
fuente

Respuestas:

4

init es /bin/bash

Como dije en https://unix.stackexchange.com/a/197472/5132 , init=/bin/shno se montan los sistemas de archivos "API", se bloquea de forma desgarbada sin vaciado de caché cuando uno escribe exit ( https: //unix.stackexchange .com / a / 195978/5132 ) y, en general, deja que el (super) usuario realice manualmente las acciones que hacen que el sistema sea mínimamente utilizable.

Una de esas acciones (si desea utilizar un shell de control de trabajo, como aparentemente lo hace) es adquirir un terminal de control . /dev/ttyNo es un dispositivo terminal real. Es un dispositivo que redirige a cualquier terminal de control del proceso de apertura. Si no tiene uno , ya que el proceso n. ° 1 no comienza (y generalmente todo el tiempo cuando se ejecuta un programa real del administrador del sistema como el proceso n. ° 1), la apertura del dispositivo falla.

Tu sistema es demasiado mínimo. Debe ejecutar un programa que configure un terminal de control, inicialice una sesión adecuada y probablemente realice algunos de los mínimos de la administración del sistema, como cerrar de manera correcta y limpia, que luego ejecute el shell de control de trabajo.

Otras lecturas

JdeBP
fuente
Gracias. ¿Podría explicar cómo puedo "configurar un terminal de control / adquirir un terminal de control"?
Martin Vegter
@MartinVegter Use el inicio de BusyBox.
Gilles 'SO- deja de ser malvado'