QEMU не запускается при выполнении в фоновом режиме внутри сценария оболочки

У меня есть приложение, которое работает нормально, с и без «&» при запуске непосредственно с терминала. Однако, если я попытаюсь выполнить его из сценария оболочки, он работает только в том случае, если завершающий «&» пропущен. Таким образом, я не могу запустить этот процесс в фоновом режиме из сценария оболочки.

<Path to My application> <options> & 

Окно приложения открывается, но после этого ничего не происходит.

(Приложение является модифицированной (по мне) версией qemu 0.13.0. Когда я запускаю образ диска из фона в сценарии оболочки, я застрял на черном экране)

Там нет необходимости фонового приложения с амперсандом, когда у него есть встроенная опция для этого. Так обстоит дело с qemu (если вы не удалили его):

 % qemu-kvm --help | grep daemon -daemonize daemonize QEMU after initializing 

Вы видите сообщение типа

 [1] suspended (tty output) myapplication 

в терминале? Это сообщение означает, что ваша программа пытается читать с терминала (вероятно, потому, что он читает со своего стандартного ввода). Поскольку только программа переднего плана может читать с терминала, программа приостанавливается.

Если вы видите это сообщение, выясните, почему ваша программа читает. В отчаянии попробуйте перенаправить свой стандартный ввод ( myapplication </dev/null ).

Если вы не видите такого сообщения, это еще одна ошибка в вашей программе. Посмотрите, что делает ваша программа в отладчике или с помощью strace .

Существует различие между запуском фоновой команды с терминала и сценария оболочки.

В неинтерактивной оболочке (с отключением управления заданиями) stdin фоновой команды неявно перенаправляется из /dev/null , что может привести к тому, что ваша команда не будет выполняться вообще.

См. Стандарт POSIX на командном языке командной оболочки: асинхронные списки .

 # compare where fd 0 is pointing to sh -c 'sleep 10 & lsof -p ${!}' sh -c 'sleep 10 0<&0 & lsof -p ${!}' sh -c 'set -m; sleep 10 & lsof -p ${!}' sh -ic 'sleep 10 & lsof -p ${!}'