GNU/Linux >> Belajar Linux >  >> Linux

Tentukan Apakah Proses "terhubung" Ke Proses Lain Melalui Pipa?

Jika saya melakukan ini:

x | y

apakah ada cara untuk memeriksa, selama runtime x, untuk melihat apakah itu terhubung ke y? Perhatikan bahwa saya tidak tahu apa itu y, dan saya tidak bertanggung jawab untuk memulai y.

Secara khusus, saya berbicara tentang runtime Node.js, jadi mungkin ini adalah pertanyaan spesifik Node.js. Tetapi pada akhirnya, saya bertanya-tanya apakah mungkin untuk menentukan runtime yang diberikan. Apakah mungkin dan bagaimana caranya?

Apakah mungkin untuk menentukan apakah stdout/stderr terhubung ke stdin dari proses lain? Saya rasa itulah yang dimaksud dengan pertanyaan ini.

Jawaban yang Diterima:

Untuk memeriksa apakah keluaran program akan menjadi pipa, berdasarkan https://nodejs.org/api/fs.html#fs_class_fs_stats, Anda ingin memanggil fs.fstat(FileDescriptor) lalu panggil isFIFO() pada stat yang dikembalikan objek (FIFO ==first-in-first-out ==pipa atau pipa bernama):

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

Di C, Anda akan membuat fstat syscall dan kemudian uji .st_mode bidang dari struct stat yang dikembalikan menggunakan S_ISFIFO makro.

Jika Anda ingin membuang siklus CPU dan ingin menggunakan biner eksternal, Anda dapat menjalankan test -p /dev/fd/$THE_FD untuk mendapatkan jawabannya (atau panggil itu di shell tempat test akan menjadi bawaan, atau jalankan stat , atau luncurkan sesuatu yang lain yang mampu menentukan jenis file).


Linux
  1. Instal MAAS di Ubuntu 20.04 - Melalui proses langkah demi langkah?

  2. Bagaimana Cara Menentukan Proses Yang Membuat File??

  3. Cara Menentukan Proses Yang Menulis ke Disk di Linux

  1. API Linux untuk menentukan soket yang dimiliki oleh suatu proses

  2. Jalankan proses persisten melalui ssh

  3. Jalankan perintah di terminal lain melalui /dev/pts

  1. Bagaimana cara menentukan proses berjalan apa yang menggunakan java?

  2. Tentukan di grup mana proses berjalan berada?

  3. Tentukan apakah file sedang dalam proses penulisan?