Высокая загрузка ЦП при работе wineconsole в фоновом режиме
У меня есть (довольно простое) консольное приложение Windows, которое я хочу запустить на сервере Linux, используя Wine. Когда я просто запустить его из терминала через SSH, как
wine myapp.exe
все отлично работает Он работает нормально, делает все, что должен, и загрузка процессора довольно низкая (около 5%).
Проблемы начинаются, когда я пытаюсь запустить его в фоновом режиме. Даже простые вещи, как
nohup wine myapp.exe
приводит к тому, что загрузка процессора увеличивается до 100% (одно полное ядро). Перенаправление вывода в /dev/null и т. Д. Не помогает.
Я попытался запустить его с помощью upstart со следующими настройками:
start on runlevel [2345]
stop on runlevel [!2345]
respawn
exec sudo -H -u myuser wine /path/to/my/app.exe &> /dev/null
Загрузка процессора составила 100%. Я попробовал еще несколько вариантов, пока не обнаружил, что следующая версия (с винконсолом, используемым вместо вина, и переключателем "-b", добавленным в sudo) работает нормально (загрузка ЦП 5-7%):
exec sudo -b -H -u myuser wineconsole /path/to/my/app.exe
Проблема в том, что если я запустил его так, выскочка не отследит pid и, следовательно, респаун и т. Д. Не сработает. Когда я добавляю "ожидаемую вилку" в конфигурацию, загрузка процессора снова возрастает до 100%. Когда я добавляю перенаправление в /dev/null, загрузка процессора возрастает до 100%. В основном все, что я делаю, приводит к тому, что загрузка процессора возрастает до 100%.
У вас есть идеи, что может вызвать этот эффект?
2 ответа
Наконец нашли источник проблемы и решение (хотя решение определенно не идеальное).
Проблема на самом деле вызвана перенаправлением ввода. Когда ввод с клавиатуры заменяется на /dev/null, что-то внутри wine или программы (я не исследовал это), по-видимому, входит в быстродействующий бесконечный цикл, который вызывает высокую загрузку процессора.
Решение, которое я нашел, - добавить "владельца консоли" в конфигурацию Upstart, чтобы он связывал процесс с консолью. После этого я даже смог правильно перенаправить вывод:)
Поскольку программа работает на выделенном сервере в центре обработки данных, этот параметр, похоже, не вызывает никаких проблем.
Я была такая же проблема. Решение для меня: сначала запустить экран Xvfb, а затем экспортировать команду DISPLAY=:1.0 && wineconsole