Einführung in Node.js, Folge 23: Child-Prozesse

the next big thing  –  0 Kommentare

In zahlreichen Anwendungen besteht die Anforderung, andere Anwendungen als Child-Prozesse zu starten. Zu dem Zweck enthält Node.js das Modul child_process. Allerdings ist Vorsicht geboten, denn das Modul führt rasch zu plattformabhängigem Code. Wie lässt sich das Problem anders lösen?

Das Modul child_process von Node.js enthält zahlreiche Funktionen, um Child-Prozesse zu starten und zu überwachen. Den Kern des Moduls stellt die Funktion spawn dar, die von allen übrigen Funktionen als interne Basis verwendet wird.

Diese übrigen Funktionen, exec und execFile, ermöglichen ebenfalls das Ausführen eines Child-Prozesses, verwenden anstelle von Streams jedoch einen Callback, um die Ergebnisse des Aufrufs zurückzugeben. Welcher Funktion wann der Vorzug zu geben ist, hängt von der konkreten Aufgabe und den gegebenen Umständen ab. Generell lässt sich aber sagen, dass execFile ein bisschen schneller ist, exec dagegen aber die bessere Kompatibilität bietet.

Unabhängig davon, für welche der genannten Funktionen man sich entscheidet, enthält das Modul auch deren synchrone Pendants, spawnSync, execSync und execFileSync. Im Gegensatz zu den asynchronen Varianten blockieren sie den weiteren Ablauf, bis der Child-Prozess beendet wurde. Darüber hinaus kennt das Modul außerdem auch die fork-Funktion, mit der sich eine neue Instanz des laufenden Node.js-Prozesses erzeugen lässt, um darüber eine weitere Node.js-Anwendung auszuführen.

Der größte Nachteil all dieser Funktionen ist, dass sie rasch zu plattformabhängigem Code führen, da die aufzurufenden Anwendungen nur auf bestimmten Betriebssystemen zur Verfügung stehen, Parameter anders zu formatieren sind oder Verzeichnisse unterschiedlich angegeben werden.

Abhilfe schafft – zumindest zu einem gewissen Grad – das npm-Modul ShellJS, das die verschiedenen Unix-Kommandos plattformunabhängig zur Verfügung stellt. Auf dem Weg lassen sich beispielsweise Befehle wie mkdir, rm oder cp auf die übliche Art ausführen, unabhängig vom zugrundeliegenden Betriebssystem.

Wie das alles funktioniert und worauf es dabei zu achten gilt, zeigt das folgende Video:

Einführung in Node.js, Folge 23: Child-Prozesse

tl;dr: Node.js enthält das child_process-Modul, um Child-Prozesse zu starten. Es bietet prinzipiell alles, was das Herz begehrt, ist aber teilweise unnötig umständlich. Abhilfe schafft das Modul ShellJS, das außerdem für eine verbesserte Plattformunabhängigkeit sorgt.