Wie kann man eine Anwendung dazu bringen, andere Prozesse auszuführen?

Wie kann man eine Anwendung dazu bringen, andere Prozesse auszuführen?

Ich führe PDFXCview.exe (für die portable Version des PDFXchange Viewers) unter Wine aus, um eine PDF-Datei zu öffnen.

PDFXCview.exe 1.pdf

Wenn ich dasselbe für eine andere Datei mache, wird die andere Datei vom gleichen Prozess von PDFXCview.exe geöffnet. Kann ich sie in einem anderen Prozess öffnen? Der Grund dafür ist, dass die Anwendung langsamer wird oder gar nicht mehr reagiert, wenn im gleichen Prozess zwei PDF-Dateien geöffnet sind.

Läuft da ein anderer Prozess oder wird das nicht von der ausführbaren Datei PDFXCview.exe bestimmt? Liegt es daran, dass die EXE-Datei als Server läuft?

ist die Lösung für andere native Linux-Anwendungen dieselbe?

Danke.

Antwort1

Nativ,mehrere Prozesse können mit demselben ausführbaren Code ausgeführt werden. Wenn das nicht von selbst passiert, dann hat das Programm es ja selbst veranlasst. Ich könnte Ihnen jedoch nicht sagen, wie das auf einem Windows-System (oder zumindest einem Windows-ähnlichen System) funktioniert. Unter Linux verwenden wir hauptsächlich .pidDateien.

Liegt es daran, dass die EXE-Datei als Server ausgeführt wird?

Nun, das könnte auch der Fall sein. Es gibt tatsächlich eine Option, die dies in Emacs ermöglicht. Ich sehe jedoch nicht ganz den Sinn eines PDF-Viewers ... Auf einem Linux-System fallen mir hierfür zwei weit verbreitete Lösungen ein:

  • Ein UNIX-Socket, der die Kommunikation zwischen zwei Instanzen ermöglicht.
  • Signale: Wenn eine zweite Instanz erzeugt wird, sendet sie lediglich ein Signal an die erste (mit der Aussage:Aufwachen!) und wird beendet.

Als erstes sollten Sie prüfen: Ist das konfigurierbar? Bei VLC zum Beispiel kann man das einstellen (und das ist ziemlich genial):

VLC-Option

Aus irgendeinem Grund (den ich nicht wirklich herausfinden möchte) kann ich Wine nicht mehr ausführen. In einer virtuellen Maschine stieß ich jedoch auf diese in derBearbeiten > VoreinstellungenSpeisekarte:

Einzelnes Dokument

Mehrere Instanzen

Wechseln zuEinzelnes Dokumentund erlaubenMehrere Instanzensollte dieses kleine Ding in den PDF-Viewer verwandeln, den Sie suchen!

Auf einem Linux-System könnten Sie wahrscheinlich versuchen, mit der von der Anwendung erstellten Datei zu spielen .pid. Dies könnte zu bösen Ergebnissen führen, aber wenn Sie die Datei löschen, nachdem die Anwendung gestartet wurde, sollten Sie in der Lage sein, die neue Instanz auszutricksen, vorausgesetzt, sie sucht nicht weiter als bis zur .pidDatei nach anderen Instanzen.

Eine andere Lösung wäre, das zweite Programm als anderer Benutzer auszuführen. Da zwei Benutzer nicht denselben Prozess gemeinsam nutzen können, muss das Programm zweimal gestartet werden. Auf diese Weise gelingt es manchen Benutzern, Skype unter Linux zweimal zu starten (obwohl dies nicht so viel Aufwand erfordert).

Sie sollten bedenken, dass es für eine Anwendung, die im Einzelinstanzmodus ausgeführt wird, wahrscheinlich einen guten Grund gibt. Außerdem ist dies meistens eher eine Benutzerentscheidung als ein tatsächlich notwendiges Design.

Pro

  • Es läuft nur ein Prozess, das heißt, es gibt einen Speicheradressraum für alle, und daher ist eine einfache Kommunikation zwischen dem, waszwei Prozesse, zwei Instanzen.

  • Einige grafische Programme werden sehr oft ausgeführt. Nehmen wir das Beispiel VLC: Jedes Mal, wenn ich eine MP3-Datei in meinem Musikverzeichnis öffne, wird ein neues Fenster erstellt! Das heißt, alle 3 oder 4 Minuten, wenn das Musikstück zu Ende ist, muss ich das alte Fenster schließen und die neue Datei öffnen. Das ist nicht praktisch. Überhaupt nicht. Es ist jedoch praktisch, wenn die aktuelle VLC-Instanz das nächste Lied in ihrer Warteschlange registriert, ohne es zu schließen/neu zu öffnen.

  • Ein weiterer Vorteil: Nehmen wir den Fall einer sehr schweren Anwendung, wie beispielsweise eines ausgefallenen Videospiels. Diese Anwendung benötigt viel Zeit und Ressourcen zum Starten, und wir alle wissen, wie leicht es ist, eine Anwendung versehentlich zu starten. Wenn Sie die Anwendung so einstellen, dass sie im Einzelinstanzmodus ausgeführt wird, wird beim Neustart normalerweise nur die erste Instanz wieder in den Vordergrund gebracht. Viele Spieleentwickler verwenden dies auch, um zu verhindern, dass sich Benutzer gleichzeitig mit mehreren Konten anmelden.

Nachteile

  • Nun, wie Sie sehen: eine Tendenz zu schlechtem Design. Da es die Kommunikation so viel einfacher macht (keine Interprozesskommunikation, IPC, erforderlich), könnten einige faule Entwickler versuchen, ihre Anwendungen ständig in einen Einzelinstanzzustand zu zwingen. Für die meisten Anwendungen ist das kein wirkliches Problem, aber für einen PDF-Viewer ist das lächerlich.

  • Nein, wirklich ein Nachteil, aber ein schlechtes Szenario: dies nicht als Option anzubieten. Sofern Ihre AnwendungWirklichim Einzelinstanzmodus ausgeführt werden muss, sollten Sie dies immer zur Auswahl des Benutzers machen (oder einfach mehrere Instanzen verwenden, wenn es nicht stört).

Doch letztlich geht es hier vor allem darum,Benutzererfahrung. Aus diesem Grund ist der Einzelinstanzmodus oft eine Option, da es wirklich darauf ankommt, wieDuVerwenden Sie das Programm. Wenn Sie nur 1 oder 2 Videodateien pro Monat ansehen, ist es Ihnen wahrscheinlich egal, ob VLC in mehreren Instanzen ausgeführt wird. Wenn Sie 100 % der Zeit Musik hören, ist Ihnen dies wichtig, denn Sie möchten nicht mitNVLC-Prozesse, mitn-1inaktive.

Antwort2

Im Allgemeinen nicht. Wenn ein Programm nie aufruft execve, haben Sie keine Möglichkeit, etwas abzufangen, es sei denn, Sie schaffen es, Code zu schreiben, um ein Symbol vorab zu laden, aber ich bin nicht sicher, ob das mit WINE überhaupt funktioniert.

verwandte Informationen