Как я имею дело с заданием, которые останавливаются и не могут продолжиться если сделанный передним планом?

Недавний пример: mountlo (использующий 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$ 

Также происходит с Калекой (когда это действительно работает, это - плагины). Части Калеки, запущенного 'калекой q.jpg&' замораживание и, не могут продолжиться если "killall - ПРОДОЛЖЕНИЕ СЛЕДУЕТ" или сделанный передний план.

Действительно ли это - ошибка? Как я надежно запускаю вещи в фоне?

0
задан 13.10.2015, 12:46

1 ответ

Это - вероятно, не ошибка. Иногда программа хочет или должна общаться с входной (STDIN) стандарта. Например, это могло бы хотеть задать вопрос. Но программа не может сделать этого, если она не работает на переднем плане, таким образом Вы получаете "Остановленное" уведомление. Можно затем принести его к переднему плану с 'fg'. Иногда это работает для перенаправления стандартного входа из некоторого файла, но затем Вы, возможно, должны были бы знать, что вставить тот файл. Вы могли попытаться перенаправить от/dev/null, который должен всегда быть доступен программе, даже если это работает в фоновом режиме. Для выполнения с STDIN, перенаправленным от/dev/null, Вы могли сделать:

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

Существуют времена, когда программа настоит, что STDIN являются терминалом, таким образом, это не может работать, и она не могла бы работать так или иначе, если, программа ожидает некоторые данные. Нижняя строка, некоторые программы ожидают работать интерактивным способом и не будут работать правильно когда фон.

0
ответ дан 27.11.2019, 19:45

Теги

Похожие вопросы