GNU/Linux >> Znalost Linux >  >> Linux

Zjistit, zda je proces „propojen“ s jiným procesem prostřednictvím potrubí?

Pokud udělám toto:

x | y

existuje nějaký způsob, jak během běhu x zkontrolovat, zda je připojen k y? Všimněte si, že nevím, co je y, a nejsem odpovědný za spuštění y.

Konkrétně mluvím o běhovém prostředí Node.js, takže možná je to otázka specifická pro Node.js. Ale nakonec mě zajímá, jestli je možné určit vzhledem k nějakému běhu. Je to možné a jak?

Je možné určit, zda jsou stdout/stderr připojeny k stdin jiného procesu? Myslím, že o tom tato otázka je.

Přijatá odpověď:

Chcete-li zkontrolovat, zda výstup programu jde do roury, na základě https://nodejs.org/api/fs.html#fs_class_fs_stats, chcete zavolat fs.fstat(FileDescriptor) a poté zavolejte isFIFO() na vráceném stat objekt (FIFO ==first-in-first-out ==roura nebo pojmenovaná roura):

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

V C byste vytvořili fstat syscall a poté otestujte .st_mode pole vráceného struct stat pomocí S_ISFIFO makro.

Pokud chcete plýtvat cykly CPU a chcete použít externí binární soubor, můžete spustit test -p /dev/fd/$THE_FD získat odpověď (nebo ji vyvolat v shellu, kde test bude vestavěný nebo spusťte stat nebo spusťte něco jiného, ​​co dokáže určit typ souboru).


Linux
  1. Nainstalovat MAAS na Ubuntu 20.04 – pomocí procesu krok za krokem?

  2. Jak zjistit, který proces vytváří soubor?

  3. Jak zobrazit výstup běžícího procesu v jiné relaci Bash?

  1. Jak zjistit, který proces zapisuje na disk v Linuxu

  2. Programově získat nadřazené pid jiného procesu?

  3. Vyhledání počtu procesů v Linuxu pomocí příkazového řádku

  1. Spusťte trvalý proces přes ssh

  2. Může být ID vlákna vícevláknového procesu stejné jako ID procesu jiného běžícího procesu?

  3. Jak zjistit, zda proces běží uvnitř lxc/Docker?