Linux'ta, çalıştırılabilir bir programın yürütülebilir dosyası değiştirildiğinde veya silindiğinde ne olur?


12

Diyelim ki /usr/local/bin/rubyarka planda çalışıyor ve sonra rubyfarklı bir sürümle üzerine yazıyoruz , hatta siliyoruz ruby.

Yakut süreçleri yürütenlere ne olacak?

Yanıtlar:


10

Yürütülebilir dosyanın tam olarak nasıl güncellendiğine bağlıdır. Aynı dosya açılır ve bir kısmı değiştirilirse, kötü şeyler olur. Kaldırılırsa, dosya dosya sisteminin dizin yapısından kaldırılır, ancak açık olan son işlem yürütülene kadar bağlantı kaldırılmaz (yani silinmez). Bu nedenle, yürütülebilir dosya kaldırılır ve yerine aynı adla yeni bir tane yazılırsa, eskisinin çalışmaya devam etmesi gerekir.


"Eğer aynı dosya açılır ve parçaları değiştirilir" eşit değildir "yürütülebilir kaldırılır ve yerine aynı adda yeni bir tane ile yazılmış" ?? Eski dosyaya mv yeni dosya kötü ama rm eski dosya kötü demek o zaman eski dosya konumuna cp yeni dosya tamam mı?
jean

4

Devam edecekler. Belki kendilerine erişmeye çalışırlar ve tamamen yanlış bir şey alırlarsa korkunç bir şekilde çökebilirler. Zorunda kalmazsam yapmazdım :)


Evet. Komut dosyaları çalışırken yazılımı her zaman el ile güncelleştiriyorum.
John T

1
Komut dosyaları için, başlangıçta açılan dosya tanımlayıcı ile çalışan gerçek son davetsiz misafirlere sahip olmak önemlidir. Bu durumda, dosyayı değiştirip değiştirmediğiniz sürece sorun yoktur. İkili dosyalar için tipik olarak inttial olarak eşlenen FD üzerinde çalışırlar, bu yüzden sorun olmaz (dosyaları değiştirmedikçe). Ancak dosya adını inceleme için açan ve riskli olabilecek uygulamalar olabilir (ancak olumsuz bir örnek veremiyorum). Çoğu linux dağıtım / paket yöneticisi, ikili dosyaları ve kütüphaneleri değiştirmenin (sınırlı bir süre için) iyi olduğu varsayımı altında çalışır.
eckes

1

Yakut süreçleri yürütenlere ne olacak?

  1. / usr / local / bin / ruby ​​kopyasını oluşturun
  2. [eğer çalışmıyorsa, / usr / local / bin / ruby ​​komutunu çalıştırın]
  3. deneyin: rm / usr / yerel / bin / yakut
  4. ve kendiniz görün :)

1

Linux çekirdeğinin, yükleme / bağlama işlemi sırasında, görüntüyü içeren, yürütülebilir dosyayı açan, yükleyici adı verilen ve bir kez kitaplıklara vb. Bağlanma işlemi tamamlandığında, yükleyici dosyayı kapatır. Böylece, bu süreç gerçekleşir ve çekirdek aslında süreci başlattığında tamamlanır.

Yürütülebilir dosya daha sonra harici kitaplıkları almaya çalışırsa, diskteki özgün yürütülebilir dosyaya başvurulması gerekip gerekmediğinden emin değilim.

Ben söyleyebilirim, ve benim deneyim oldu, eğer diskteki yürütülebilir dosyayı silerseniz, belleğe yüklenen yürütülebilir dosya etkilenmez. Benzer şekilde, yürütülebilir dosya daha yeni bir sürümle değiştirilirse, yürütülmekte olan dosyalar durdurulup yeniden başlatılmadıkça "otomatik olarak" güncelleştirilmez.

Kök dizininin ve diğer bölümlerin bağlandığı tüm diskin aniden bağlantısı kesilmiş gibi davranmasına neden olan bir RAID denetleyicisiyle ilgili sorunlar yaşadım. Yeni programlar yüklenemedi, ancak bellekteki dosyalar diskten dosyalara ihtiyaç duyana kadar iyi çalışıyordu.


Kulağa çok verimli gelmiyor. Bence Windows bunun yerine bellek eşlemesi yapar, bu yüzden sayfalar talep üzerine yüklenir.
sashoalm
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.