2017-06-27 4 views
0

Wie kann ich alle untergeordneten Prozesse töten, ohne Elternprozess zu töten? Ich spinne mehrere Prozesse in meinem Knotenscript, ich möchte sie alle töten und neue Prozesse hervorbringen.Kill alle untergeordneten Prozesse, aber nicht den übergeordneten Prozess

Für jetzt habe ich eine terminate npm Bibliothek gefunden, die einen Elternprozess und alle seine Kinder tötet, aber ich möchte nicht den Elternteil töten, und die beste Lösung wäre, keine Bibliotheken von Drittanbietern zu verwenden.

terminate(process.pid, function (err) { 
    if (err) { 
     console.error("Could not kill processes"); 
    } 
}); 
+0

Behalten Sie irgendwie die Kindprozesse im Auge? –

+0

Hier ist eine Dokumentation speziell für node.js https://nodejs.org/api/process.html#process_process_kill_pid_signal – alvits

Antwort

0

Eine Möglichkeit, dies zu erreichen, ist, ein Signal zu liefern, das abgefangen werden kann (nicht SIGKILL). Installieren Sie dann einen Signalhandler, der erkennt, ob der aktuelle Prozess der übergeordnete Prozess ist oder nicht, und ruft _exit() auf, wenn es sich nicht um den übergeordneten Prozess handelt.

Sie könnten SIGUSR1 oder SIGUSR2 oder vielleicht SIGQUIT verwenden.

Ich habe diese Technik hier veranschaulicht.

Optional (wie von Lidong vorgeschlagen) kann der übergeordnete Prozess SIG_IGN für das Signal verwenden, bevor der Befehl kill() ausgegeben wird.

signal(SIGQUIT, SIG_IGN); kill(-parent_pid, SIGQUIT);

Verwandte Themen