Назад | Перейти на главную страницу

Высокая загрузка ЦП при работе Wineconsole в фоновом режиме

У меня есть (довольно простое) консольное приложение Windows, которое я хочу запустить на сервере Linux с помощью Wine. Когда я просто запускаю его с терминала через SSH, например

wine myapp.exe

все отлично работает. Он работает нормально, делает все, что должен, и загрузка процессора довольно низкая (около 5%).

Проблемы начинаются, когда я пытаюсь запустить его в фоновом режиме. Даже такие простые вещи, как

nohup wine myapp.exe

приводит к резкому увеличению загрузки ЦП до 100% (одно полное ядро). Перенаправление вывода в / dev / null и т. Д. Не помогает.

Я пробовал запустить его с помощью выскочки со следующими настройками:

start on runlevel [2345]
stop on runlevel [!2345]

respawn

exec sudo -H -u myuser wine /path/to/my/app.exe &> /dev/null

Загрузка процессора составила 100%. Я пробовал еще несколько вариантов, пока не обнаружил, что следующая версия (с использованием wineconsole вместо wine и переключателем "-b", добавленным в sudo) работает нормально (загрузка процессора 5-7%):

exec sudo -b -H -u myuser wineconsole /path/to/my/app.exe

Проблема в том, что если я запустил его так, выскочка не отслеживает pid, поэтому респаун и т. Д. Не работает. Когда я добавляю в конфигурацию "expect-fork", загрузка ЦП снова возрастает до 100%. Когда я добавляю перенаправление в / dev / null, загрузка ЦП возрастает до 100%. Практически все, что я делаю, приводит к увеличению загрузки процессора до 100%.

Есть ли у вас идеи, что может вызвать такой эффект?

Наконец нашел источник проблемы и решение (хотя решение определенно не идеальное).

На самом деле проблема вызвана перенаправлением ввода. Когда ввод с клавиатуры заменяется / dev / null, что-то внутри wine или программы (я не исследовал это), по-видимому, переходит в быстро работающий бесконечный цикл, который вызывает высокую загрузку процессора.

Решение, которое я нашел, - добавить «владельца консоли» в конфигурацию Upstart, чтобы он подключал процесс к консоли. После этого я даже смог правильно перенаправить вывод :)

Поскольку программа работает на выделенном сервере в центре обработки данных, этот параметр не вызывает никаких проблем.

Я была такая же проблема. Решение для меня: сначала запустить экран Xvfb, а затем экспортировать команду DISPLAY =: 1.0 && wineconsole