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

417
Vi.

Недавний пример: 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 $ Проверка того, что ptrace может изменять номера системных вызовов ... ОК Проверка исправления эмуляции системного вызова для ptrace ... ОК Проверка расширенного патча эмуляции системного вызова для ptrace ... ОК Проверка PROT_EXEC mmap в /tmp...OK Проверка наличия патча skas3 на хосте: - /proc/mm... not found - PTRACE_FAULTINFO ... не найдено - PTRACE_LDT ... не найдено UML работает в режиме SKAS0   [1] + Остановлено 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] + Остановлено 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] + Остановлено 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] + Остановлено 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 2.6.15 (miko @ dorka) (версия gcc 3.3.5 (Debian 1: 3.3.5-13)) # 1 понедельник, 27 февраля 13:27:52 CET 2006 (нормальный выход) ...  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: нет дочерних процессов VI @ VI-ноутбук: ~ / б $  

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

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

0

1 ответ на вопрос

0
Marnix A. van Ammers

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

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

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

Да, он взаимодействует с STDIN. Пока не удается реализовать обходной путь, чтобы заставить его работать правильно. `да" "| mountlo .... `является ближайшим. Vi. 14 лет назад 0

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