Si hago esto:
x | y
 ¿Hay alguna forma de verificar, durante el tiempo de ejecución de x, para ver si está conectado a y? Tenga en cuenta que no sé qué es y, y no soy responsable de iniciar y.
Específicamente, estoy hablando del tiempo de ejecución de Node.js, así que tal vez esta sea una pregunta específica de Node.js. Pero en última instancia, me pregunto si es posible determinar dado cualquier tiempo de ejecución. ¿Es posible y cómo?
¿Es posible determinar si stdout/stderr están conectados a stdin de otro proceso? Supongo que de eso se trata esta pregunta.
Respuesta aceptada:
 Para verificar si la salida del programa va a una tubería, según https://nodejs.org/api/fs.html#fs_class_fs_stats, debe llamar a fs.fstat(FileDescriptor) y luego llamar a isFIFO() en el stat devuelto objeto (FIFO ==primero en entrar, primero en salir ==una tubería o una tubería con nombre):
$ </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, harías el fstat syscall y luego pruebe el .st_mode campo del struct stat devuelto usando el S_ISFIFO macro.
 Si le gusta desperdiciar ciclos de CPU y quiere usar un binario externo, puede ejecutar test -p /dev/fd/$THE_FD para obtener la respuesta (o invocarla en un shell donde test será un incorporado, o ejecutará stat , o inicie otra cosa capaz de determinar el tipo de archivo).