sarmalayıcı komut dosyalarında çalıştırma nedeni


27

Özetle aşağıdaki sarmalayıcı komut örnekleri gördüm:

#!/bin/bash

myprog=sleep
echo "This is the wrapper script, it will exec "$myprog""

exec "$myprog" "$@"

Yukarıda görüldüğü gibi, execyeni oluşturulan kabuğu hemen hemen ile değiştirmek için kullanırlar $myprog. Biri aynı olmadan başarabilirdi exec:

#!/bin/bash

myprog=sleep
echo "This is the wrapper script, it will exec "$myprog""

"$myprog" "$@"

Bu son örnekte, yeni bir bash örneği başlatılır ve ardından $myprogbash örneğinin alt işlemi olarak başlatılır.

İlk yaklaşımın faydaları nelerdir?



Yanıtlar:


31

Kullanımı exec, sargının daha saydam olmasını sağlar; yani, komut dosyasını çağıran kullanıcının veya uygulamanın “gerçek” programı başlatan bir röle olduğunun farkında olması gerekir.

Özellikle, arayan kişi programı öldürmek istiyorsa, yeni başlattıkları süreci öldürürler. Paketleyici komut dosyası bir alt işlem çalıştırıyorsa, arayan kişinin paketleyicinin çocuğunu bulması ve onu öldürmesi gerektiğini bilmesi gerekir. Sarıcı betiği bazı sinyalleri iletmek için bir tuzak kurabilir, ancak bu yakalanamayan SIGSTOP veya SIGKILL ile çalışmaz.

Arama yapmak execayrıca biraz bellek tasarrufu sağlar (ve PID'ler gibi diğer kaynakları da) çünkü hiçbir şey yapmadan fazladan bir kabuk tutmanıza gerek kalmaz.

Birden fazla sarıcı varsa, problemler artar (öldürmek için doğru işlemi bulmakta zorluk, yükü hafızada vb.).

Bazı mermiler (örn. Korn kabuğu) bir komutun en sonuncusu olduğunda otomatik olarak algılar ve aktif tuzak execbulunmaz ve bir örtülü bırakmaz, ancak hepsi yapmaz (örn. Bash).


10

Hiçbir yinelenen bulamıyorsanız ... yeterince iyi sebep veren FreeBSD el kitabına bakın :

execDeyim belirtilen program ile kabuk süreci değiştirir. Eğer execatlanırsa, kabuk işlem programı yürütülürken bellekte kalır ve gereksiz tüketir sistem kaynaklarını.

esasen sebep bana uzun bir süre önce (taşıyıcılardan biri tarafından) açıklanmış ve oldukça iyi bilinmektedir.

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.