bash: nessun controllo del lavoro in questa shell


8

Ho un sistema Linux minimale.

init è /bin/bash, solo il minimo delle librerie in /lib/, /dev/è popolato staticamente, nessun demone in esecuzione (no udev, ..)

Quando inizia bash, ottengo il seguente errore:

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

Quando inizio bash con strace, ottengo il seguente output:

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

Sembra che Bash non possa aprirsi /dev/tty. Ma /dev/ttyesiste /dev/e ha le autorizzazioni corrette:

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

Perché non riesco ad bashaprire /dev/tty? E cosa significa l' ENXIOerrore?

Risposte:


4

init è /bin/bash

Come ho detto su https://unix.stackexchange.com/a/197472/5132 , init=/bin/shnon vengono montati i file system "API", si arresta in modo sgraziato senza svuotare la cache quando si digita exit ( https: //unix.stackexchange .com / a / 195978/5132 ) e in generale lascia all'utente (super) l'esecuzione manuale delle azioni che rendono il sistema minimamente utilizzabile.

Una di queste azioni (se si desidera utilizzare una shell di controllo del lavoro, come apparentemente si fa) è l' acquisizione di un terminale di controllo . /dev/ttynon è un vero dispositivo terminale. È un dispositivo che reindirizza a qualunque sia il terminale di controllo del processo di apertura. Se non ne ha uno , poiché il processo n. 1 non inizia (e di solito tutto il tempo in cui un vero programma di gestione del sistema viene eseguito come processo n. 1), l'apertura del dispositivo non riesce.

Il tuo sistema è troppo minimale. È necessario eseguire un programma che imposta un terminale di controllo, inizializza una sessione corretta e probabilmente esegue alcuni dei minimi minimi di gestione del sistema come lo spegnimento corretto e pulito, che esegue quindi la shell di controllo del lavoro.

Ulteriori letture


Grazie. Potresti per favore elaborare come posso "impostare un terminale di controllo / acquisire un terminale di controllo"?
Martin Vegter,

@MartinVegter Usa init di BusyBox.
Gilles 'SO- smetti di essere cattivo' il
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.