bash: nenhum controle de tarefa neste shell

10

Eu tenho um sistema Linux mínimo.

o init é /bin/bash , apenas o mínimo de bibliotecas em /lib/ , /dev/ é preenchido estaticamente, nenhum daemons em execução (no udev, ..)

Quando o bash começa, recebo o seguinte erro:

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

Quando eu começo o bash com o strace, recebo a seguinte saída:

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 o bash não pode abrir /dev/tty . Mas /dev/tty existe em /dev/ e tem permissões corretas:

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 que não é possível bash abrir /dev/tty ? E o que significa o erro ENXIO ?

    
por Martin Vegter 23.12.2015 / 20:13

1 resposta

4

init is /bin/bash

Como eu disse no link , init=/bin/sh não possui sistemas de arquivos "API" montados, falhas em uma moda deselegante, sem cache flush quando se digita exit ( link ), e em geral deixa para o (super) usuário para fazer manualmente as ações que tornam o sistema minimamente utilizável.

Uma dessas ações (se você quiser usar um shell de controle de job, como você aparentemente faz) está adquirindo um terminal de controle . /dev/tty não é um dispositivo de terminal real. É um dispositivo que redireciona para qualquer terminal de controle do processo de abertura. Se não tiver um , como o processo # 1 não deve começar (e geralmente o tempo todo quando um programa gerenciador de sistemas real está sendo executado como processo # 1), a abertura do dispositivo falhará .

Seu sistema é muito mínimo. Você precisa executar um programa que configure um terminal de controle, inicialize uma sessão apropriada e, provavelmente, faça alguns dos mínimos do gerenciamento do sistema, como encerrar de forma adequada e limpa, e depois executar o shell de controle de tarefas.

Leitura adicional

por 23.12.2015 / 22:14