GNU/Linux >> Belajar Linux >  >> Linux

Mengapa "ls" Membutuhkan Proses Terpisah Untuk Dieksekusi?

Mengapa ls memerlukan proses terpisah untuk eksekusinya?
Saya tahu alasan mengapa perintah seperti cd tidak dapat dieksekusi dengan mekanisme forking tetapi apakah ada salahnya jika ls dieksekusi tanpa forking?

Jawaban yang Diterima:

Jawabannya kurang lebih ls adalah executable eksternal. Anda dapat melihat lokasinya dengan menjalankan type -p ls .

Mengapa tidak ls dibangun ke dalam shell, lalu? Nah, kenapa harus begitu? Tugas shell bukanlah untuk mencakup setiap perintah yang tersedia, tetapi untuk menyediakan lingkungan yang mampu menjalankannya. Beberapa shell modern memiliki echo , printf , dan sejenisnya sebagai bawaan, yang tidak secara teknis harus bawaan, tetapi dibuat demikian untuk alasan kinerja ketika dijalankan berulang kali (terutama dalam loop ketat). Tanpa menjadikannya bawaan, shell harus melakukan fork dan mengeksekusi proses baru untuk setiap panggilan ke mereka, yang bisa jadi sangat lambat.

Setidaknya, menjalankan ls , executable eksternal, memerlukan menjalankan salah satu keluarga exec dari panggilan sistem. Anda bisa lakukan ini tanpa forking, tetapi itu akan menggantikan shell utama yang Anda gunakan. Anda dapat melihat apa yang terjadi dalam contoh tersebut dengan melakukan hal berikut:

exec ls; echo "this never gets printed"

Karena gambar proses shell Anda diganti, shell saat ini tidak lagi dapat diakses setelah melakukan ini. Agar shell dapat terus berjalan setelah menjalankan ls, perintah harus dibangun ke dalam shell.

Forking memungkinkan penggantian proses yang bukan shell utama Anda, yang berarti Anda dapat terus menjalankan shell Anda setelahnya.


Linux
  1. Mengapa Cd Bukan Program?

  2. Mengapa Substitusi Proses Bash Tidak Bekerja Dengan Beberapa Perintah?

  3. Mengapa Shell Login 'Sudo -i' Memecah Argumen String Perintah Di Sini-doc?

  1. Apa artinya 'cd -'?

  2. Mengapa menjalankan perintah shell Linux dengan '&'?

  3. Mengapa 'dd' tidak berfungsi untuk membuat USB yang dapat di-boot?

  1. Mengapa Pergantian Perintah Shell Melahap A Trailing Newline Char?

  2. Mengapa Ctrl + V tidak menempel di Bash (Linux shell)?

  3. Daemonisasi proses di shell?