Недавний пример: 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 - ПРОДОЛЖЕНИЕ СЛЕДУЕТ" или сделанный передний план.
Действительно ли это - ошибка? Как я надежно запускаю вещи в фоне?
Это - вероятно, не ошибка. Иногда программа хочет или должна общаться с входной (STDIN) стандарта. Например, это могло бы хотеть задать вопрос. Но программа не может сделать этого, если она не работает на переднем плане, таким образом Вы получаете "Остановленное" уведомление. Можно затем принести его к переднему плану с 'fg'. Иногда это работает для перенаправления стандартного входа из некоторого файла, но затем Вы, возможно, должны были бы знать, что вставить тот файл. Вы могли попытаться перенаправить от/dev/null, который должен всегда быть доступен программе, даже если это работает в фоновом режиме. Для выполнения с STDIN, перенаправленным от/dev/null, Вы могли сделать:
$ program arg1 arg2 arg3 ... </dev/null
Существуют времена, когда программа настоит, что STDIN являются терминалом, таким образом, это не может работать, и она не могла бы работать так или иначе, если, программа ожидает некоторые данные. Нижняя строка, некоторые программы ожидают работать интерактивным способом и не будут работать правильно когда фон.