Bagaimana cara kerja pipa internal di linux?

-1

Ketika saya melakukan ps, ps akan menunjukkan itu dalam daftar.
Tetapi ketika saya melakukan ps | grep halo walaupun ps adalah proses, grep adalah proses yang ditunjukkan.
Apakah pipa bekerja seperti itu?
Bagaimana pipa dibaca dan ditutup secara otomatis?
Terima kasih

Ishan
sumber

Jawaban:

2

meskipun ps adalah proses, grep adalah proses yang ditunjukkan

Keduanya ps dan grep merupakan proses. Anda hanya tidak melihat psgaris karena tidak ada "halo" di dalamnya. Coba, misalnya, ps | grep ".*"sebagai gantinya, atau bahkan ps | sort | tac | shuf.

Dengan kata lain, Anda memiliki:

  • Proses 1: ps aux

    • Fd 0 (stdin): terminal (/ dev / tty)
    • Fd 1 (stdout): pipa anonim (→ tulis)
    • Fd 2 (stderr): terminal
  • Proses 2: grep hello

    • Fd 0 (stdin): pipa anonim (baca →)
    • Fd 1 (stdout): terminal
    • Fd 2 (stderr): terminal

berjalan pada saat bersamaan .


Inilah tes lain yang menarik - minta lsuntuk menunjukkan deskriptor file sendiri:

$ ls -l / proc / self / fd | kucing
lrwx ------ 1 64 Jul 31 14:29 0 -> / dev / pts / 1
l-wx ------ 1 64 Jul 31 14:29 1 -> pipa: [8087631]
lrwx ------ 1 64 Jul 31 14:29 2 -> / dev / pts / 1
lr-x ------ 1 64 Jul 31 14:29 3 -> / proc / 2150013 / fd /

$ echo test | ls-l / proc / self / fd
lr-x ------ 1 64 Jul 31 14:29 0 -> pipa: [8086629]
lrwx ------ 1 64 Jul 31 14:29 1 -> / dev / pts / 1
lrwx ------ 1 64 Jul 31 14:29 2 -> / dev / pts / 1
lr-x ------ 1 64 Jul 31 14:29 3 -> / proc / 2150022 / fd /

$ echo test | ls-l / proc / self / fd | kucing
lr-x ------ 1 64 Jul 31 14:30 0 -> pipa: [8088183]
l-wx ------ 1 64 Jul 31 14:30 1 -> pipa: [8088184]
lrwx ------ 1 64 Jul 31 14:30 2 -> / dev / pts / 1
lr-x ------ 1 64 Jul 31 14:30 3 -> / proc / 2150056 / fd /
grawity
sumber