GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Feststellen, ob der Prozess über Pipes mit einem anderen Prozess „verbunden“ ist?

Wenn ich das mache:

x | y

Gibt es eine Möglichkeit, während der Laufzeit von x zu überprüfen, ob es mit y verbunden ist? Beachten Sie, dass ich nicht weiß, was y ist, und nicht dafür verantwortlich bin, y zu starten.

Ich spreche insbesondere von der Node.js-Laufzeit, also ist dies vielleicht eine Node.js-spezifische Frage. Aber letztendlich frage ich mich, ob es möglich ist, eine gegebene Laufzeit zu bestimmen. Ist das möglich und wie?

Kann festgestellt werden, ob stdout/stderr mit der stdin eines anderen Prozesses verbunden sind? Ich denke, darum geht es in dieser Frage.

Akzeptierte Antwort:

Um zu überprüfen, ob die Ausgabe des Programms in eine Pipe geht, basierend auf https://nodejs.org/api/fs.html#fs_class_fs_stats, möchten Sie fs.fstat(FileDescriptor) aufrufen und rufen Sie dann isFIFO() auf auf dem zurückgegebenen stat Objekt (FIFO ==first-in-first-out ==eine Pipe oder eine benannte Pipe):

$ </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

In C würden Sie die fstat erstellen syscall und teste dann den .st_mode Feld des zurückgegebenen struct stat mit dem S_ISFIFO Makro.

Wenn Sie gerne CPU-Zyklen verschwenden und eine externe Binärdatei verwenden möchten, können Sie test -p /dev/fd/$THE_FD ausführen um die Antwort zu erhalten (oder rufen Sie diese in einer Shell auf, in der test wird ein eingebautes sein oder stat ausführen , oder starten Sie etwas anderes, das den Dateityp bestimmen kann).


Linux
  1. Kommunikation zwischen Prozessen in Linux:Verwendung von Pipes und Nachrichtenwarteschlangen

  2. Installieren Sie MAAS unter Ubuntu 20.04 - Schritt für Schritt?

  3. Wie kann ich die Ausgabe eines laufenden Prozesses in einer anderen Bash-Sitzung anzeigen?

  4. Linux-API zum Ermitteln von Sockets, die einem Prozess gehören

  5. Führen Sie einen persistenten Prozess über ssh aus

Wie kann festgestellt werden, ob ein Prozess in lxc/Docker ausgeführt wird?

Sind Unix/Linux-Pipes hersteller- oder verbraucherorientiert?

Wie kann ich feststellen, welcher Prozess eine Datei in Linux geöffnet hat?

Wie kann ich feststellen, welcher laufende Prozess Java verwendet?

Bestimmen Sie, in welcher Gruppe(n) sich ein laufender Prozess befindet?

Feststellen, ob gerade auf die Datei geschrieben wird?