Katakanlah /usr/local/bin/ruby
sedang berjalan di latar belakang, dan kemudian kita menimpa ruby
dengan versi yang berbeda, atau bahkan menghapus ruby
.
Apa yang akan terjadi pada mereka yang menjalankan proses ruby?
Itu tergantung pada bagaimana eksekusi dieksekusi. Jika file yang sama dibuka dan bagian-bagiannya diubah, hal-hal buruk akan terjadi. Jika dihapus, file dihapus dari struktur direktori sistem file, tetapi tidak benar-benar dihapus tautannya (yaitu, dihapus) sampai proses terakhir yang terbuka telah dieksekusi keluar. Jadi jika executable dihapus dan yang baru dengan nama yang sama tertulis di tempatnya, yang lama harus terus bekerja ok.
Mereka akan terus berjalan. Mungkin crash mengerikan jika mereka mencoba dan mengakses diri mereka sendiri dan menerima sesuatu yang sama sekali salah. Saya tidak akan melakukannya kecuali saya harus :)
sumber
sumber
Ini adalah pemahaman saya bahwa kernel Linux memiliki komponen yang disebut loader yang membuka file yang dapat dieksekusi itu sendiri, berisi gambar, selama proses pemuatan / penautan, dan setelah selesai dengan menghubungkan ke perpustakaan, dll., Loader menutup file. Dengan demikian, proses ini terjadi dan selesai pada saat kernel benar-benar meluncurkan proses.
Saya tidak yakin apakah executable asli pada disk perlu direferensikan jika executable nanti mencoba mengimpor pustaka eksternal.
Saya akan mengatakan, dan sudah pengalaman saya bahwa, jika Anda menghapus executable pada disk, executable yang dimuat dalam memori tidak terpengaruh. Demikian juga, jika file yang dapat dieksekusi diganti dengan versi yang lebih baru, yang saat ini mengeksekusi tidak "secara otomatis" diperbarui kecuali mereka dihentikan dan diluncurkan kembali.
Saya memiliki masalah dengan pengontrol RAID yang menyebabkan seluruh disk tempat direktori root dan partisi lainnya dipasang untuk tiba-tiba bertindak seolah-olah terputus. Tidak dapat memuat program baru, tetapi yang ada di memori berfungsi dengan baik, sampai mereka membutuhkan file dari disk.
sumber