GNU/Linux >> Tutoriales Linux >  >> Linux

¿Determinar si el proceso está "conectado" a otro proceso a través de tuberías?

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


Linux
  1. ¿Cómo determinar qué proceso está creando un archivo?

  2. Cómo determinar qué proceso está escribiendo en el disco en Linux

  3. Ejecutar un proceso persistente a través de ssh

  4. ¿Puede el Id. de subproceso de un proceso multiproceso ser el mismo que el Id. de proceso de otro proceso en ejecución?

  5. ¿Cómo determinar si un proceso se ejecuta dentro de lxc/Docker?

¿Obtener programáticamente el id principal de otro proceso?

API de Linux para determinar los sockets que pertenecen a un proceso

Encontrar el recuento de procesos en Linux a través de la línea de comandos

¿Cómo puedo determinar qué proceso tiene un archivo abierto en Linux?

¿Cómo saber si he iniciado sesión a través de SSH?

¿Determinar si el sistema de archivos o la partición está montado RO o RW a través de Bash Script?