Como faço para lidar com trabalhos que param e não podem continuar a menos que sejam feitos em primeiro plano?

0

Exemplo recente: mountlo (usando UML):

vi@vi-notebook:~/b$ mountlo -m 16 -d /dev/uba1 /home/vi/mnt/usb -t vfat -o iocharset=utf8,allow_other&
[1] 32561
vi@vi-notebook:~/b$ Checking that ptrace can change system call numbers...OK
Checking syscall emulation patch for ptrace...OK
Checking advanced syscall emulation patch for ptrace...OK
Checking PROT_EXEC mmap in /tmp...OK
Checking for the skas3 patch in the host:
  - /proc/mm...not found
  - PTRACE_FAULTINFO...not found
  - PTRACE_LDT...not found
UML running in SKAS0 mode


[1]+  Stopped                 mountlo -m 16 -d /dev/uba1 /home/vi/mnt/usb -t vfat -o iocharset=utf8,allow_other
vi@vi-notebook:~/b$ bg
[1]+ mountlo -m 16 -d /dev/uba1 /home/vi/mnt/usb -t vfat -o iocharset=utf8,allow_other &

[1]+  Stopped                 mountlo -m 16 -d /dev/uba1 /home/vi/mnt/usb -t vfat -o iocharset=utf8,allow_other
vi@vi-notebook:~/b$ bg
[1]+ mountlo -m 16 -d /dev/uba1 /home/vi/mnt/usb -t vfat -o iocharset=utf8,allow_other &

[1]+  Stopped                 mountlo -m 16 -d /dev/uba1 /home/vi/mnt/usb -t vfat -o iocharset=utf8,allow_other
vi@vi-notebook:~/b$ bg
[1]+ mountlo -m 16 -d /dev/uba1 /home/vi/mnt/usb -t vfat -o iocharset=utf8,allow_other &

[1]+  Stopped                 mountlo -m 16 -d /dev/uba1 /home/vi/mnt/usb -t vfat -o iocharset=utf8,allow_other
vi@vi-notebook:~/b$ fg
mountlo -m 16 -d /dev/uba1 /home/vi/mnt/usb -t vfat -o iocharset=utf8,allow_other
Linux version 2.6.15 (miko@dorka) (gcc version 3.3.5 (Debian 1:3.3.5-13)) #1 Mon Feb 27 13:27:52 CET 2006
(normal output)
...

vi@vi-notebook:~/b$ socat - exec:'mountlo -m 16 -d /dev/uba1 /home/vi/mnt/usb -t vfat -o iocharset=utf8\,allow_other',pty,ctty
fusermount: waitpid: No child processes
vi@vi-notebook:~/b$ 

Também acontece com o Gimp (quando ele executa seus plug-ins). Partes do Gimp iniciadas por 'gimp q.jpg &' congelar e não pode continuar a menos que "killall -CONT" ou feito em primeiro plano.

É um bug? Como posso iniciar de maneira confiável as coisas em segundo plano?

    
por Vi. 23.05.2010 / 15:56

1 resposta

0

Provavelmente não é um bug. Às vezes, um programa quer ou precisa se comunicar com a entrada padrão (STDIN). Por exemplo, pode querer fazer uma pergunta. Mas um programa não pode fazer isso a menos que esteja rodando em primeiro plano, então você recebe o aviso "Parado". Você pode então trazê-lo para o primeiro plano com 'fg'. Às vezes, ele funciona para redirecionar a entrada padrão de algum arquivo, mas você pode precisar saber o que colocar nesse arquivo. Você pode tentar redirecionar de / dev / null, que deve estar sempre disponível para o programa, mesmo que esteja sendo executado em segundo plano. Para rodar com STDIN redirecionado de / dev / null, você poderia fazer:

$ program arg1 arg2 arg3 ... </dev/null

Há momentos em que um programa irá insistir que STDIN seja um terminal, então isso pode não funcionar e pode não funcionar de qualquer maneira se, o programa estiver esperando alguns dados. Linha de fundo, alguns programas esperam trabalhar de forma interativa e não funcionarão corretamente quando usados em segundo plano.

    
por 23.05.2010 / 16:44