Node.js - Processus

L'objet de processus est un objet global et est accessible de n'importe où. Il existe plusieurs méthodes disponibles dans un objet de processus.

Événements de processus

L'objet de processus est une instance d'EventEmitter et émet les événements suivants -

N ° Sr. Description de l'évenement
1

exit

Émis lorsque le processus est sur le point de se terminer. Il n'y a aucun moyen d'empêcher la sortie de la boucle d'événements à ce stade, et une fois que tous les écouteurs de sortie ont fini de s'exécuter, le processus se terminera.

2

beforeExit

Cet événement est émis lorsque le nœud vide sa boucle d'événements et n'a rien d'autre à planifier. Normalement, le nœud se ferme lorsqu'aucun travail n'est planifié, mais un écouteur pour 'beforeExit' peut effectuer des appels asynchrones et provoquer la poursuite du nœud.

3

uncaughtException

Émis lorsqu'une exception remonte jusqu'à la boucle d'événements. Si un écouteur est ajouté pour cette exception, l'action par défaut (qui consiste à imprimer une trace de pile et à quitter) ne se produira pas.

4

Signal Events

Émis lorsque le processus reçoit un signal tel que SIGINT, SIGHUP, etc.

Exemple

Créez un fichier js nommé main.js avec le code suivant pour écouter exit événement -

process.on('exit', function(code) {
   // Following code will never execute.
   setTimeout(function() {
      console.log("This will not run");
   }, 0);
  
   console.log('About to exit with code:', code);
});
console.log("Program Ended");

Maintenant, exécutez le main.js pour voir le résultat -

$ node main.js

Vérifiez la sortie.

Program Ended
About to exit with code: 0

Codes de sortie

Le nœud se termine normalement avec un code d'état 0 lorsqu'aucune autre opération asynchrone n'est en attente. Il existe d'autres codes de sortie qui sont décrits ci-dessous -

Code Nom et description
1

Uncaught Fatal Exception

Il y avait une exception non interceptée et elle n'a pas été gérée par un domaine ou un gestionnaire d'événements uncaughtException.

2

Unused

réservé par Bash pour une utilisation abusive intégrée.

3

Internal JavaScript Parse Error

Le code source JavaScript interne au processus d'amorçage de Node a provoqué une erreur d'analyse. Ceci est extrêmement rare et ne peut généralement se produire que pendant le développement de Node lui-même.

4

Internal JavaScript Evaluation Failure

Le code source JavaScript interne au processus d'amorçage de Node n'a pas réussi à renvoyer une valeur de fonction lors de son évaluation. Ceci est extrêmement rare et ne peut généralement se produire que pendant le développement de Node lui-même.

5

Fatal Error

Une erreur irrécupérable fatale s'est produite dans le V8. En règle générale, un message sera imprimé sur stderr avec le préfixe FATAL ERROR.

6

Non-function Internal Exception Handler

Il y avait une exception non interceptée, mais la fonction de gestionnaire d'exceptions fatales interne était en quelque sorte définie sur une non-fonction et ne pouvait pas être appelée.

sept

Internal Exception Handler Run-Time Failure

Il y avait une exception non interceptée et la fonction de gestionnaire d'exceptions fatales interne elle-même a renvoyé une erreur en tentant de la gérer.

8

Unused

9

Invalid Argument

Soit une option inconnue a été spécifiée, soit une option nécessitant une valeur a été fournie sans valeur.

dix

Internal JavaScript Run-Time Failure

Le code source JavaScript interne au processus d'amorçage de Node a généré une erreur lorsque la fonction d'amorçage a été appelée. Ceci est extrêmement rare et ne peut généralement se produire que pendant le développement de Node lui-même.

11

Invalid Debug Argument

Les options --debug et / ou --debug-brk ont ​​été définies, mais un numéro de port invalide a été choisi.

12

Signal Exits

Si Node reçoit un signal fatal tel que SIGKILL ou SIGHUP, alors son code de sortie sera 128 plus la valeur du code de signal. Il s'agit d'une pratique Unix standard, car les codes de sortie sont définis comme des entiers de 7 bits, et les sorties de signal définissent le bit de poids fort, puis contiennent la valeur du code de signal.

Propriétés du processus

Process fournit de nombreuses propriétés utiles pour mieux contrôler les interactions du système.

N ° Sr. Propriété et description
1

stdout

Un flux inscriptible vers stdout.

2

stderr

Un flux inscriptible vers stderr.

3

stdin

Un flux inscriptible vers stdin.

4

argv

Un tableau contenant les arguments de la ligne de commande. Le premier élément sera 'node', le second élément sera le nom du fichier JavaScript. Les éléments suivants seront tous les arguments de ligne de commande supplémentaires.

5

execPath

C'est le chemin absolu de l'exécutable qui a démarré le processus.

6

execArgv

Il s'agit de l'ensemble des options de ligne de commande spécifiques au nœud de l'exécutable qui a démarré le processus.

sept

env

Un objet contenant l'environnement utilisateur.

8

exitCode

Un nombre qui sera le code de sortie du processus, lorsque le processus se termine correctement ou est quitté via process.exit () sans spécifier de code.

9

version

Une propriété compilée qui expose NODE_VERSION.

dix

versions

Une propriété exposant les chaînes de version du nœud et ses dépendances.

11

config

Un objet contenant la représentation JavaScript des options de configuration qui ont été utilisées pour compiler l'exécutable du nœud actuel. C'est le même que le fichier "config.gypi" qui a été produit lors de l'exécution du script ./configure.

12

pid

Le PID du processus.

13

title

Getter / setter pour définir ce qui est affiché dans «ps».

14

arch

Quelle architecture de processeur vous exécutez: 'arm', 'ia32' ou 'x64'.

15

platform

Sur quelle plateforme vous utilisez: 'darwin', 'freebsd', 'linux', 'sunos' ou 'win32'

16

mainModule

Autre façon de récupérer require.main. La différence est que si le module principal change au moment de l'exécution, require.main peut toujours faire référence au module principal d'origine dans les modules qui étaient requis avant la modification. En général, il est prudent de supposer que les deux font référence au même module.

Exemple

Créez un fichier js nommé main.js avec le code suivant -

// Printing to console
process.stdout.write("Hello World!" + "\n");

// Reading passed parameter
process.argv.forEach(function(val, index, array) {
   console.log(index + ': ' + val);
});

// Getting executable path
console.log(process.execPath);

// Platform Information 
console.log(process.platform);

Maintenant, exécutez le main.js pour voir le résultat -

$ node main.js

Vérifiez la sortie lors de l'exécution de votre programme sur une machine Linux -

Hello World!
0: node
1: /web/com/1427106219_25089/main.js
/usr/bin/node
linux

Référence des méthodes

Process fournit de nombreuses méthodes utiles pour mieux contrôler les interactions du système.

Sr. Non Méthode et description
1

abort()

Cela provoque le nœud à émettre un abandon. Cela provoque la fermeture du nœud et la génération d'un fichier core.

2

chdir(directory)

Modifie le répertoire de travail actuel du processus ou lève une exception en cas d'échec.

3

cwd()

Renvoie le répertoire de travail actuel du processus.

4

exit([code])

Termine le processus avec le code spécifié. S'il est omis, exit utilise le code «succès» 0.

5

getgid()

Obtient l'identité de groupe du processus. Il s'agit de l'identifiant numérique du groupe, pas du nom du groupe. Cette fonction n'est disponible que sur les plateformes POSIX (c'est-à-dire pas Windows, Android)

6

setgid(id)

Définit l'identité de groupe du processus. (Voir setgid (2)). Il accepte soit un identifiant numérique, soit une chaîne de nom de groupe. Si un nom de groupe est spécifié, cette méthode se bloque lors de sa résolution en un identifiant numérique. Cette fonction n'est disponible que sur les plates-formes POSIX (c'est-à-dire pas Windows, Android).

sept

getuid()

Obtient l'identité de l'utilisateur du processus. Il s'agit de l'identifiant numérique, pas du nom d'utilisateur. Cette fonction n'est disponible que sur les plateformes POSIX (c'est-à-dire pas Windows, Android).

8

setuid(id)

Définit l'identité de l'utilisateur du processus (voir setgid (2)). Il accepte soit un identifiant numérique, soit une chaîne de nom d'utilisateur. Si un nom d'utilisateur est spécifié, cette méthode se bloque tout en le résolvant en un identifiant numérique. Cette fonction n'est disponible que sur les plates-formes POSIX (c'est-à-dire pas Windows, Android).

9

getgroups()

Renvoie un tableau avec les ID de groupe supplémentaires. POSIX ne spécifie pas si l'ID de groupe effectif est inclus, mais node.js garantit qu'il l'est toujours. Cette fonction n'est disponible que sur les plates-formes POSIX (c'est-à-dire pas Windows, Android).

dix

setgroups(groups)

Définit les ID de groupe supplémentaires. Il s'agit d'une opération privilégiée, ce qui implique que vous devez être à la racine ou avoir la capacité CAP_SETGID. Cette fonction n'est disponible que sur les plates-formes POSIX (c'est-à-dire pas Windows, Android).

11

initgroups(user, extra_group)

Lit / etc / group et initialise la liste d'accès aux groupes, en utilisant tous les groupes dont l'utilisateur est membre. Il s'agit d'une opération privilégiée, ce qui implique que vous devez être à la racine ou avoir la capacité CAP_SETGID. Cette fonction n'est disponible que sur les plates-formes POSIX (c'est-à-dire pas Windows, Android).

12

kill(pid[, signal])

Envoyez un signal à un processus. pid est l'identifiant du processus et signal est la chaîne décrivant le signal à envoyer. Les noms de signal sont des chaînes telles que «SIGINT» ou «SIGHUP». S'il est omis, le signal sera «SIGTERM».

13

memoryUsage()

Renvoie un objet décrivant l'utilisation de la mémoire du processus Node mesurée en octets.

14

nextTick(callback)

Une fois que le tour de la boucle d'événements en cours est terminé, appelez la fonction de rappel.

15

umask([mask])

Définit ou lit le masque de création du mode fichier du processus. Les processus enfants héritent du masque du processus parent. Renvoie l'ancien masque si l'argument masque est donné, sinon renvoie le masque actuel.

16

uptime()

Nombre de secondes d'exécution du nœud.

17

hrtime()

Renvoie le temps réel haute résolution actuel dans un tableau tuple de [secondes, nanosecondes]. Il est relatif à un moment arbitraire dans le passé. Il n'est pas lié à l'heure du jour et n'est donc pas sujet à la dérive de l'horloge. L'utilisation principale est de mesurer les performances entre les intervalles.

Exemple

Créez un fichier js nommé main.js avec le code suivant -

// Print the current directory
console.log('Current directory: ' + process.cwd());

// Print the process version
console.log('Current version: ' + process.version);

// Print the memory usage
console.log(process.memoryUsage());

Maintenant, exécutez le main.js pour voir le résultat -

$ node main.js

Vérifiez la sortie lors de l'exécution de votre programme sur une machine Linux -

Current directory: /web/com/1427106219_25089
Current version: v0.10.33
{ rss: 11505664, heapTotal: 4083456, heapUsed: 2157704 }