GNU/Linux >> Linux Esercitazione >  >> Linux

Determinare se il processo è "collegato" a un altro processo tramite tubi?

Se faccio questo:

x | y

c'è un modo per controllare, durante il runtime di x, se è connesso a y? Nota che non so cosa sia y e non sono responsabile dell'avvio di y.

In particolare, sto parlando del runtime di Node.js, quindi forse questa è una domanda specifica di Node.js. Ma alla fine, mi chiedo se è possibile determinare dato il tempo di esecuzione. È possibile e come?

È possibile determinare se stdout/stderr sono collegati allo stdin di un altro processo? Immagino sia di questo che si tratta questa domanda.

Risposta accettata:

Per verificare se l'output del programma sta andando su una pipe, in base a https://nodejs.org/api/fs.html#fs_class_fs_stats, devi chiamare fs.fstat(FileDescriptor) e quindi chiama isFIFO() sul stat restituito oggetto (FIFO ==first-in-first-out ==una pipe o una named 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, creeresti il ​​fstat syscall e quindi testare .st_mode campo della struct stat restituita utilizzando il S_ISFIFO macro.

Se ti piace sprecare cicli della CPU e vuoi usare un binario esterno, puoi eseguire test -p /dev/fd/$THE_FD per ottenere la risposta (o invocarla in una shell dove test sarà un built-in o eseguirà stat o avviare qualcos'altro in grado di determinare il tipo di file).


Linux
  1. Comunicazione tra processi in Linux:utilizzo di pipe e code di messaggi

  2. Come determinare quale processo sta scrivendo su disco in Linux

  3. Ottieni in modo programmatico il pid genitore di un altro processo?

  4. API Linux per determinare i socket di proprietà di un processo

  5. Trovare il conteggio dei processi in Linux tramite la riga di comando

Esegui un processo persistente tramite ssh

L'ID thread di un processo multithread può essere uguale all'ID processo di un altro processo in esecuzione?

Come determinare se un processo viene eseguito all'interno di lxc/Docker?

Le pipe Unix/Linux sono guidate dal produttore o dal consumatore?

Determina in quali gruppi si trova un processo in esecuzione?

Determinare se il file è in fase di scrittura?