Недавний пример: 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$ 

Также происходит с Gimp (когда он запускается, это плагины). Части Gimp, запускаемые `gimp q.jpg & ', замораживаются и не могут продолжаться, пока« killall -CONT »или не сделан передним планом.

Это ошибка? Как мне надежно начать все в фоновом режиме?

1 ответ1

0

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

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .