Wednesday 15 November 2017

Daemonize C # Prozess Waitforexit


Ich schaffe eine GUI-Anwendung mit Visual C 2005 (Netto-Framework 2). Ich benutze den folgenden Code, um einen Prozess zu starten: Ich möchte, dass meine Anwendung wartet, bis dieser Prozess beendet ist, also habe ich WaitForExit benutzt. Aber die GUI Windows friert, während app. exe läuft. Ich möchte, dass es reagiert (z. B. drücken Sie eine Abbrechen-Taste), aber ich möchte nicht, dass der Code fortfährt, denn es gibt einen anderen Prozess, um danach zu beginnen. Vielen Dank im Voraus gefragt 13. November 09 um 9:19 Vielleicht solltest du eine Lösung mit dem BackgroundWorker implementieren. Es ist einfach zu implementieren und tut was du willst. Was Sie tun müssen, fügen Sie eine Instanz eines BackgroundWorker in Ihrem Formular hinzu und machen Sie den Aufruf des Prozesses, der die App. exe aus der BackgrondWorker RunWorkerAsync-Methode ausführt. Dann können Sie auf eine CancelationPending-Eigenschaft überwachen, um den Prozess - oder RunWorkerCompleted-Ereignis zu beenden, um das zu tun, was nach dem Beenden des Prozesses erforderlich ist. Es gibt noch eine andere Frage. In Bezug auf die BackgroundWorker-Abbruch die Lösung für diese ist mit einem Multi-Threading-Start durch Hinzufügen: dann schauen Sie sich den Code unten: startet einen neuen Thread, der den Prozess startet, so dass, wenn Sie WaitForExit nennen es nicht Freez der Haupt-Thread, wenn Sie laufen möchten Mehrere Prozess zurück zu hinten ist es ein weiterer Fall müssen Sie etwas wie eine Liste der Prozess Blick auf den Code bellow Ich füge ein anderes manuell, aber Sie können eine Schleife für Beispiel verwenden, dann werden Sie sie beginnen, obwohl Ihr Thread und der 2. Prozess Wird warten, bis die erste beendet ist, ohne die UI zu beenden, beantwortet am 5. Juli 13 um 17: 07Entwicklung eines Daemon-Prozesses in C-Sprache mit einem Beispielprogramm Ein Dämon-Prozess ist ein Prozess, der im Hintergrund läuft und kein Controlling-Terminal hat. Da ein Daemon-Prozess in der Regel kein Controlling-Terminal hat, ist fast keine Benutzerinteraktion erforderlich. Daemon-Prozesse werden verwendet, um Dienste bereitzustellen, die im Hintergrund ohne jegliche Benutzerinteraktion durchgeführt werden können. Zum Beispiel kann ein Prozess, der im Hintergrund läuft und die Netzwerkaktivität beobachtet und jede verdächtige Kommunikation protokolliert, als Daemon-Prozess entwickelt werden. Daemon Process Design Ein Daemon-Prozess kann wie jeder andere Prozess entwickelt werden, aber es gibt eine Sache, die es mit jedem anderen normalen Prozess unterscheidet, dh kein Controlling-Terminal. Dies ist ein wichtiger Design-Aspekt bei der Schaffung eines Daemon-Prozesses. Dies kann erreicht werden durch: Erstellen eines normalen Prozesses (übergeordneter Prozess) Erstellen eines untergeordneten Prozesses aus dem obigen übergeordneten Prozess Die Prozesshierarchie in diesem Stadium sieht aus wie. TERMINAL - gt PARENT PROCESS - gt CHILD PROCESS Beenden Sie den übergeordneten Prozess. Der Kindprozess wird nun verwaist und wird vom Init-Prozess übernommen. Rufen Sie die setid () - Funktion auf, um den Prozess in der neuen Sitzung auszuführen und eine neue Gruppe zu haben. Nach dem obigen Schritt können wir sagen, dass jetzt dieser Prozess ein Dämonenprozess wird, ohne ein steuerndes Terminal zu haben. Ändern Sie das Arbeitsverzeichnis des Daemon-Prozesses zu root und schließen Sie stdin, stdout und stderr Dateideskriptoren. Lassen Sie die Hauptlogik des Dämonenprozesses laufen. So sehen wir, dass die oben genannten Schritte grundlegende Designschritte zum Erstellen eines Dämons markieren. C-Gabel () - Funktion Bevor Sie einen tatsächlichen laufenden Dämon nach den oben genannten Entwurfsschritten erstellen, können Sie zuerst etwas über den Gabel - () Systemaufruf lernen. Fork () - System erstellt einen untergeordneten Prozess, der genaue Replik des übergeordneten Prozesses ist. Dieser neue Prozess wird als 8216child8217 Prozess bezeichnet. Dieser Systemaufruf wird einmal (im übergeordneten Prozess) aufgerufen, aber zweimal zurückgegeben (einmal im übergeordneten und zum zweiten Mal im Kind). Beachten Sie, dass nach dem Aufruf des fork () - Systems, ob das übergeordnete Element zuerst läuft oder das Kind nicht deterministisch ist. Es hängt rein vom Kontext-Schaltmechanismus ab. Dieser Aufruf gibt Null in Kind zurück, während PID des Kindprozesses im übergeordneten Prozess zurückgegeben wird. Im Folgenden sind einige wichtige Aspekte dieses Aufrufs: Das Kind hat seine eigene, einzigartige Prozess-ID, und diese PID stimmt nicht mit der ID einer bestehenden Prozessgruppe überein. Die kind8217s übergeordnete Prozess-ID ist die gleiche wie die parent8217s Prozess-ID. Das Kind erbt seine parent8217s Speicher-Sperren nicht. Prozessressourcenauslastung und CPU-Zeitzähler werden im Kind auf Null zurückgesetzt. Das Kind8217s anstehende Signale ist zunächst leer. Das Kind erbt keine Semaphore-Anpassungen von seinem Elternteil. Das Kind erbt keine Datensatzsperren von seinem übergeordneten Element. Das Kind erbt keine Timer von seinem Elternteil. Das Kind erbt keine herausragenden asynchronen IO-Operationen von seinem Elternteil, noch erbt es keine asynchronen IO-Kontexte von seinem übergeordneten. Für weitere Einblicksinformationen lesen Sie bitte die Manpage dieses Systemaufrufs. Die Implementierung Basierend auf dem Design, wie im ersten Abschnitt erwähnt. Hier ist die komplette Implementierung: Im Folgenden ist die Art und Weise, durch die der Code kompiliert und ausgeführt wurde: Beachten Sie nur, dass die Steuerung sofort wieder an das Terminal zurückkam, dh der Dämon ist jetzt keinem Terminal zugeordnet. Wenn Sie die log. txt-Datei im Root-Verzeichnis überprüfen, können Sie sehen, dass dieser Daemon-Prozess ausgeführt wird.

No comments:

Post a Comment