GNU/Linux >> Tutoriels Linux >  >> Linux

Déterminez si le processus est "connecté" à un autre processus via des tuyaux ?

Si je fais ceci :

x | y

existe-t-il un moyen de vérifier, pendant l'exécution de x, s'il est connecté à y ? Notez que je ne sais pas ce qu'est y et que je ne suis pas responsable de commencer y.

Plus précisément, je parle de l'environnement d'exécution Node.js, il s'agit donc peut-être d'une question spécifique à Node.js. Mais finalement, je me demande s'il est possible de déterminer le temps d'exécution. Est-ce possible et comment ?

Est-il possible de déterminer si les stdout/stderr sont connectés au stdin d'un autre processus ? Je suppose que c'est de cela qu'il s'agit.

Réponse acceptée :

Pour vérifier si la sortie du programme va dans un tube, basé sur https://nodejs.org/api/fs.html#fs_class_fs_stats, vous voulez appeler fs.fstat(FileDescriptor) puis appelez isFIFO() sur le stat renvoyé objet (FIFO ==premier entré premier sorti ==un tube ou un tube nommé) :

$ </dev/null node -e 'var fs=require("fs");
   fs.fstat(0,function(err,stats){ if(err) throw(err); console.log(stats.isFIFO()); });  ' 
  false
$  : | node -e 'var fs=require("fs");
   fs.fstat(0,function(err,stats){ if(err) throw(err); console.log(stats.isFIFO()); });  ' 
  true

En C, vous feriez le fstat syscall puis testez le .st_mode champ de la struct stat renvoyée en utilisant le S_ISFIFO macro.

Si vous aimez gaspiller des cycles CPU et souhaitez utiliser un binaire externe, vous pouvez exécuter test -p /dev/fd/$THE_FD pour obtenir la réponse (ou l'invoquer dans un shell où test sera une fonction intégrée, ou exécutez stat , ou lancez quelque chose d'autre capable de déterminer le type de fichier).


Linux
  1. Comment déterminer quel processus crée un fichier ? ?

  2. API Linux pour déterminer les sockets appartenant à un processus

  3. L'ID de thread d'un processus multithread peut-il être le même que l'ID de processus d'un autre processus en cours d'exécution ?

  4. Comment déterminer si un processus s'exécute dans lxc/Docker ?

  5. Les pipes Unix/Linux sont-elles axées sur le producteur ou le consommateur ?

Comment afficher la sortie d'un processus en cours d'exécution dans une autre session Bash ?

Comment déterminer quel processus écrit sur le disque sous Linux

Obtenir par programmation le pid parent d'un autre processus ?

Recherche du nombre de processus sous Linux via la ligne de commande

Exécuter un processus persistant via ssh

Déterminez si le fichier est en cours d'écriture ?