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.