Как обмануть приложение, чтобы оно запускало разные процессы?

Как обмануть приложение, чтобы оно запускало разные процессы?

Я запускаю PDFXCview.exe (для портативной версии pdfxchange viewer) под Wine, чтобы открыть файл PDF,

PDFXCview.exe 1.pdf

Когда я делаю то же самое для другого файла, другой файл будет открыт тем же процессом PDFXCview.exe. Могу ли я открыть его в другом процессе? Причина в том, что приложение становится медленнее или вообще не отвечает, когда в одном процессе открыты два файла PDF.

Запускается другой процесс или не определяется исполняемым файлом PDFXCview.exe? Это потому что exe-файл работает как сервер?

одинаково ли решение для других собственных приложений Linux?

Спасибо.

решение1

Изначально,несколько процессов могут быть запущены с одним и тем же исполняемым кодом. Если это не происходит естественным образом, то да, сама программа заставила это произойти. Однако я не могу сказать вам, как это делается в системе Windows (или, по крайней мере, в Windows-подобной). В Linux мы в основном используем .pidфайлы.

Это потому, что exe-файл работает как сервер?

Ну, это тоже может быть так. На самом деле, в Emacs есть опция, которая позволяет это сделать. Однако я не вижу смысла в просмотрщике PDF... В системе Linux я могу придумать два широко используемых решения для этого:

  • Сокет UNIX, позволяющий двум экземплярам обмениваться данными.
  • Сигналы: когда создается второй экземпляр, он просто посылает сигнал первому (говоря:Проснуться!) и выходит.

Первое, что вы, возможно, захотите проверить: это настраивается? Например, в VLC это можно настроить (и это довольно круто):

опция VLC

По какой-то причине (которую я не хочу выяснять) я больше не могу запустить Wine. Однако, в виртуальной машине я наткнулся на них вРедактировать > Настройкименю:

Отдельный документ

Несколько экземпляров

Переключение наОтдельный документи позволяяНесколько экземпляровдолжно превратить эту маленькую вещицу в тот просмотрщик PDF, который вы ищете!

В системе Linux вы, вероятно, могли бы попробовать поиграть с .pidфайлом, созданным приложением. Это может закончиться неприятными результатами, но если вы удалите файл после запуска приложения, вы должны быть в состоянии обмануть новый экземпляр, при условии, что он не будет искать другие экземпляры дальше файла .pid.

Другим решением было бы запустить вторую программу от имени другого пользователя, поскольку два пользователя не могут совместно использовать один и тот же процесс, программе придется запускаться дважды. Именно так некоторые люди успешно запускают Skype дважды на Linux (хотя это не требует особых усилий).

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

Плюсы

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

  • Некоторые графические программы запускаются очень часто. Возьмем, к примеру, VLC: каждый раз, когда я открываю файл MP3 в своей папке Music, он создает новое окно! То есть каждые 3 или 4 минуты, когда музыка заканчивается, мне приходится закрывать старое окно и открывать новый файл. Это не удобно. Совсем. Однако, если текущий экземпляр VLC регистрирует следующую песню в своей очереди без закрытия/повторного открытия, это здорово.

  • Еще одно преимущество: возьмем случай сверхтяжелого приложения, например, крутой видеоигры. Это приложение требует много времени и ресурсов для запуска, и мы все знаем, как легко случайно запустить приложение по ошибке. Если настроить приложение на запуск в режиме одного экземпляра, его перезапуск обычно просто возвращает первый экземпляр на передний план. Многие разработчики игр также используют это, чтобы помешать пользователям входить в систему с несколькими учетными записями одновременно.

Минусы

  • Ну, как вы видите: тенденция к плохому дизайну. Действительно, поскольку это делает коммуникацию намного проще (нет необходимости в межпроцессном взаимодействии, IPC), некоторые ленивые разработчики могут попытаться заставить свои приложения все время находиться в состоянии одного экземпляра. Для большинства приложений это не проблема, но для просмотрщика PDF это просто смешно.

  • Не то чтобы это был минус, но плохой сценарий: не предлагать это как вариант. Если только ваше приложениеДействительнонеобходимо запустить в одноэкземплярном режиме, вы всегда должны сделать это выбором пользователя (или просто использовать многоэкземплярный режим, когда это не мешает).

Однако в конечном итоге главная проблема здесь заключается в следующем:Пользовательский опыт. Вот почему режим одного экземпляра часто является вариантом, потому что это действительно зависит от того, кактыиспользуйте программу. Если вы просто смотрите 1 или 2 видеофайла в месяц, вам, вероятно, не важно, что VLC работает в нескольких экземплярах. Если вы слушаете музыку 100% времени, вам это не важно, потому что вы не хотите в конечном итогенПроцессы VLC, сн-1неактивные.

решение2

В общем, нет. Если программа никогда не вызывает execve, у вас нет возможности что-либо перехватить, если только вы не напишете код для предварительной загрузки по символу, но я не уверен, что это вообще работает с WINE.

Связанный контент