Können wir beginnen, ein Prozess im hintergrund mit exec() gibt & als argument?
Wenn nicht, wie können wir einen Hintergrundprozess starten, in C?
InformationsquelleAutor | 2009-10-02
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn nicht, wie können wir einen Hintergrundprozess starten, in C?
InformationsquelleAutor | 2009-10-02
Du musst angemeldet sein, um einen Kommentar abzugeben.
In Unix, exec() ist nur ein Teil der Geschichte.
exec() wird verwendet, um starten Sie eine neue Binärdatei, die innerhalb des aktuellen Prozesses. Das bedeutet, dass die Binärdatei, die derzeit ausgeführt wird, der im aktuellen Prozess nicht mehr ausgeführt werden.
Also, vor dem Aufruf von exec(), die Sie anrufen möchten fork() erstellt einen neuen Prozess, so dass Sie Ihre aktuelle binäre können weiter ausgeführt werden.
Normalerweise, um die aktuelle binary abwarten für den neuen Prozess zu beenden, rufen Sie eine der warten* ( - ) Familie. Diese Funktion wird den aktuellen Prozess schlafen, bis der Prozess, den Sie warten, ist fertig.
So, in Reihenfolge zu erstellen ein "hintergrund" - Prozess den aktuellen Prozess sollte, überspringen Sie einfach den Anruf zu warten.
Ich schlage vor, einen thread eröffnen, dann in dem thread kann man Gabel und warten Sie für das Kind.
ein thread ist ein sehr teurer Weg, um zu verhindern, dass ein zombie. Die standard Empfehlung ist, fangen SIGCHLD und dann rufen Sie warten in Ihrem signal-handler.
Klatchko ich musste unbedingt ein thread in meinem Programm weil 1. Es muss async (ich möchte nur das Programm in den hintergrund) 2. Ich betreibe eine große Menge Male, Kind-Programm, das führt zu eine große Menge von zombies (über 6000 in 1 Stunde, wenn unstopped). Mit der SIGCHLD es hat nicht funktioniert wie erwartet, es schien zu warten, bis das Ende des Kind-Programm, vielleicht bause es wurde auf den Haupt-thread.
InformationsquelleAutor R Samuel Klatchko
Verwenden Sie die
fork()
rufen Sie zum erstellen eines neuen Prozess, der dann exec () - laden eines Programms in diesem Prozess. Siehe die man-Seiten (man 2 fork
,man 2 exec
) für mehr Informationen, auch.Würdet Ihr weiter ausbauen? fork() ist, wie man erstellen Sie einen neuen Prozess, das ist, was Sie tun müssen, wenn Sie etwas in den hintergrund aus einem C-Programm ...
Gabel hat genau 100% um die Schaffung eines hintergrund-Prozess. Was redest du da?
InformationsquelleAutor unwind
Gabel gibt die PID des Kindes, also die gemeinsame Sprache ist:
InformationsquelleAutor Kevin Peterson