Jadi ketika sebuah perintah ditembakkan dari shell, fork () mewarisi proses anak dari itu dan exec () memuat proses anak ke memori dan mengeksekusi.
Tidak terlalu. fork()
mengkloning proses saat ini, menciptakan anak yang identik. exec()
memuat program baru ke dalam proses saat ini, menggantikan yang sudah ada.
Qs saya adalah:
Jika proses anak berisi semua atribut dari proses induk (yang merupakan proses asli), lalu apa kebutuhan proses anak ini? Proses aslinya juga bisa dimuat ke memori.
Kebutuhannya adalah karena proses induk belum ingin mengakhiri; ia ingin proses baru berjalan dan melakukan sesuatu pada saat yang sama yang terus dijalankannya juga.
Apakah konsep fork dan exec ini berlaku untuk semua program yang dapat dieksekusi di UNIX? Seperti untuk skrip shell juga atau hanya untuk perintah? Apakah itu juga berlaku untuk perintah shell builtin?
Untuk perintah eksternal, shell melakukan fork()
sehingga perintah berjalan dalam proses baru. Builtin hanya dijalankan oleh shell secara langsung. Perintah penting lainnya adalah exec
, yang memberi tahu shell ke exec()
program eksternal tanpa terlebih dahulu fork()
. Ini berarti bahwa shell itu sendiri diganti dengan program baru, dan tidak ada lagi untuk program yang kembali ketika keluar. Jika Anda mengatakan,, exec true
maka /bin/true
akan mengganti shell Anda, dan segera keluar, tidak meninggalkan apa pun yang berjalan di terminal Anda lagi, jadi itu akan menutup.
ketika konsep copy on write digunakan jika saya akan menjalankan perintah / skrip?
Kembali di zaman batu, fork()
sebenarnya harus menyalin semua memori dalam proses panggilan ke proses baru. Salin pada Tulis adalah pengoptimalan di mana tabel halaman diatur sehingga kedua proses memulai berbagi semua memori yang sama, dan hanya halaman yang ditulis oleh proses mana pun yang disalin bila diperlukan.