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).