GNU/Linux >> Belajar Linux >  >> Linux

Dalam Urutan Apa Perintah Pipa Dijalankan?

Saya tidak pernah benar-benar memikirkan bagaimana shell benar-benar mengeksekusi perintah yang disalurkan. Saya selalu diberi tahu bahwa “stdout dari satu program di-pipe ke dalam stdin orang lain,” sebagai cara berpikir tentang pipa. Jadi tentu saja, saya berpikir bahwa dalam kasus katakanlah, A | B , A akan dijalankan terlebih dahulu, lalu B mendapatkan stdout dari A , dan menggunakan stdout dari A sebagai masukannya.

Tetapi saya perhatikan bahwa ketika orang menelusuri proses tertentu di ps , mereka akan menyertakan grep -v "grep" di akhir perintah untuk memastikan bahwa grep tidak muncul pada hasil akhir.
Artinya pada perintah ps aux | grep "bash" | grep -v "grep" tersirat bahwa ps tahu bahwa grep sedang berjalan dan oleh karena itu dalam output ps . Tetapi jika ps selesai berjalan sebelum outputnya disalurkan ke grep , bagaimana ia tahu bahwa grep sedang berlari?

[email protected]: ~$ ps | grep ".*"
PID TTY          TIME CMD
3773 pts/0    00:00:00 bash
3784 pts/0    00:00:00 ps
3785 pts/0    00:00:00 grep

Jawaban yang Diterima:

Perintah yang disalurkan berjalan secara bersamaan. Saat Anda menjalankan ps | grep … , ini adalah undian keberuntungan (atau soal detail cara kerja shell yang dikombinasikan dengan fine-tuning scheduler jauh di dalam perut kernel) apakah ps atau grep dimulai terlebih dahulu, dan bagaimanapun mereka terus mengeksekusi secara bersamaan.

Ini sangat umum digunakan untuk memungkinkan program kedua memproses data seperti yang keluar dari program pertama, sebelum program pertama menyelesaikan operasinya. Misalnya

grep pattern very-large-file | tr a-z A-Z

mulai menampilkan baris yang cocok dalam huruf besar bahkan sebelum grep telah selesai melintasi file besar.

grep pattern very-large-file | head -n 1

menampilkan baris pertama yang cocok, dan mungkin berhenti memproses sebelum grep telah selesai membaca file inputnya.

Jika Anda membaca di suatu tempat bahwa program pipa berjalan secara berurutan, tinggalkan dokumen ini. Program pipa berjalan secara bersamaan dan selalu begitu.


Linux
  1. Perintah Kustom

  2. Apa yang Membuat Grep Mempertimbangkan File Menjadi Biner?

  3. Memahami Perintah Ssh yang Mencurigakan?

  1. Apa arti rc dalam file dot

  2. Jika, selain itu berdasarkan perintah disalurkan ke grep

  3. Apa urutan default dari jenis Linux?

  1. Perintah Terjadwal

  2. Linux – Bagaimana Mengetahui Apa yang Harus Diambil Di Dmesg?

  3. Menjalankan Perintah Pipa Secara Paralel?