Sözdizimi:
tuzak [-lp] [[arg] signal_spec… ]veya
tuzak [eylem] [sinyal]Anahtar | Açıklama |
-ben | İlgili numara ile tüm sinyal adlarının listesini görüntülemek için kullanılır. |
-p | Signal_spec için sinyal komutunu veya tuzak komutunu görüntülemek için kullanılır. |
argüman | Kabuk sinyal(ler)i aldığında bir komutu yürütmek için kullanılır. |
sinyal_spec | Sinyal adı veya sinyal numarası içerir. |
- arg değeri olmayan veya '-' arg değeri olan tuzak komutu, belirtilen sinyali orijinal değerine sıfırlayacaktır.
- 'Boş' argüman değerine sahip tuzak komutu, kabuk veya komut tarafından gönderilen belirtilen sinyali yok sayar.
- Değeri olan bir sinyal_spec, çıkış(0) kabuktan çıktıktan sonra arg yürütecek.
- Değere sahip bir sinyal_spec hata ayıklama her bir komuttan önce arg yürütecek.
- Değere sahip bir sinyal_spec dönüş bir kabuk işlevi yürütüldüğünde veya " tarafından bir komut dosyası çalıştırıldığında arg'yi yürütür.”.
- Değere sahip bir sinyal_spec hata komut hatasında her seferinde arg yürütecek.
Herhangi bir seçenek ve argüman olmadan tuzak komutu
Her koşulla ilişkili tüm komutların listesini görüntülemek için terminalden aşağıdaki komutu çalıştırın. Daha önce herhangi bir 'trap' komutu ayarlanmamışsa, aşağıdaki komut herhangi bir bilgi görüntülemeyecektir.
$ tuzak-l seçeneği ile tuzak komutu
Numaralı tüm sinyal adlarının listesini görüntülemek için terminalden aşağıdaki komutu çalıştırın.
$ tuzak -lYukarıdaki komutun çıktısı, sayılarla birlikte 64 sinyalin listesini gösterecektir.
ERR ve EXIT için tuzak komutu ayarla
Aşağıdaki ilk komut, herhangi bir kabuk hatası oluştuğunda veya kabuk çıktığında yürütülecek bir 'tuzak' komutu ayarlayacaktır. Bu 'tuzak' komutu kaldıracak sıcaklık.Txt geçerli konumdan dosya. kontrol etmek için 'ls' komutu kullanılır sıcaklık.Txt dosya mevcut konumda var veya yok. son olarak çıkış komut, terminali kapatmak ve daha önce ayarlanmış olan 'trap' komutunu çalıştırmak için kullanılır.
$ trap 'rm temp.txt' hatası çıkışı$ l
$ çıkış
Yukarıdaki komutları çalıştırdıktan sonra aşağıdaki çıktı görünecektir.
Şimdi, kullanıcı çıkıştan sonra tekrar terminali açar ve 'ls' komutunu çalıştırırsa, o zaman sıcaklık.Txt dosya olmayacak.
SIGUP, SIGQUIT ve SIGKILL sinyal numarasıyla 'trap' komutunu ayarlayın
sinyal numarası SİGUP, SIGQUIT ve SIGKILL 1, 3 ve 9. Aşağıdaki ilk komut, bu üç sinyal için bir tuzak kuracaktır. Bu sinyallerden herhangi biri meydana geldiğinde, “Tuzak komutu yürütülür” yazdıracak. Terminalden aşağıdaki komutu çalıştırın.
$ trap 'echo Trap komutu yürütüldü' 1 3 9Kullanıcı ne zaman basacak Ctrl+C 'trap' komutuyla atanan sinyali oluşturmak için 'Eko' trap komutunun komutu yürütülecek ve aşağıdaki çıktı görünecektir.
Bir komut dosyasında SIGTERM için 'tuzak' komutunu ayarlayın
SIGTERM sinyali, kaynaklarını serbest bırakarak süreci hemen sonlandırmak için kullanılır. ' adlı bir bash dosyası oluşturuntrapscript.ş' aşağıdaki kodla. Komut dosyasında, bir metni sürekli olarak yazdıracak olan sonsuz bir for döngüsü bildirildi SIGTERM sinyal oluşur. Kullanıcının basması gerekir Ctrl+Z üretmek SIGTERM sinyal.
trapscript.ş
#!/bin/bash# SIGINT ve SIGTERM sinyalleri için bir tuzak ayarlayın
trap "echo Program sonlandırıldı." SİGTERM İŞARETİ
#SIGTERM oluşturmak için mesajı görüntüle
echo "Ctrl+Z'ye basın işlemi durdurun"
#Sayaç değişkenini başlat, i
ben=1
#döngü için sonsuz deklare
için(;;)
yapmak
#i sayacı ile mesajı yazdır
echo "$i kez döngüyü çalıştırma"
#Sayacı bir artır
((i++))
bitti
Aşağıdaki komutu yürüterek komut dosyasını çalıştırın ve oluşturmak için Ctrl+Z tuşlarına basın SIGTERM sinyal. Aşağıdaki benzer çıktı görünecektir.
$ bash trapscript.ş
Belirli bir sinyale dayalı bir işlevi çalıştırmak için bir 'tuzak' komutu ayarlayın
Bir 'tuzak' komutunu kullanıcı tanımlı herhangi bir işlevle ilişkilendirebilirsiniz. Adlı bir bash oluşturun tuzak.ş ve aşağıdaki betiği ekleyin. Burada, adlı özel bir işlev işlev() basit bir mesaj yazdıracağı bildirildi, "Görev tamamlandı". Geçerli çalışma dizinindeki tüm dosya ve klasörlerin listesini okumak ve yazdırmak için bir for-in döngüsü tanımlanmıştır. 'tuzak' listenin başında tanımlanan komut, işlevi çağırır, işlev() program sona erdiğinde.
tuzak.ş
#!/bin/bash# Çıkışta çağrı fonksiyonu
tuzak işlevi çıkışı
# Fonksiyonu bildir
işlev işlevi ()
echo "Görev tamamlandı"
# Döngüyü kullanarak mevcut dizin listesinin dosya ve klasörlerini okuyun
ben için *
yapmak
yankı "$i"
bitti
Komut dosyasını terminalden çalıştırın.
Komut dosyasını çalıştırın.
$ bash tuzak.şAşağıdaki çıktı gösteriyor ki, "Görev tamamlandı” metni, geçerli dizinin tüm dosya ve klasörlerini yazdırdıktan sonra yazdırılır.
Sonuç
Bu öğretici, oluşturulan sinyale dayalı olarak herhangi bir otomatik görevi yapmak için Linux'ta 'trap' komutunun nasıl kullanılabileceğini gösterir. Bu komutu kullanarak kullanıcıların farklı türdeki hataları izlemesine ve daha önce atanabilecek uygun eylemi gerçekleştirmesine yardımcı olur. Birçok program veya komut dosyası, sistemde çalışırken bazı belirli kaynakları tahsis eder. Çalışan herhangi bir program veya komut dosyası anormal şekilde çıkar veya sonlandırılırsa, o program tarafından kullanılan kaynaklar engellenir. Bu sorunu çözmek için 'trap' komutu kullanılabilir. Bu komut kullanılarak kaynak temizleme görevi kolayca yapılabilir. Umarım, okuyucu bu öğreticiyi okuduktan sonra bu komutun kullanımları hakkında net bir fikir edinecektir.