Bash'te Bir Komutu Gereksiz Gecikme Olmadan Zaman Aşımına Uğratma

Bash Te Bir Komutu Gereksiz Gecikme Olmadan Zaman Asimina Ugratma



Bash'te bazen tamamlanması uzun süren bir komutu çalıştırmanız gerekebilir ve sonsuza kadar bitmesini beklemek istemeyebilirsiniz. Bu sorunun bir çözümü, bir komutun çalışabileceği süreyi sınırlayan bir zaman aşımı komutu kullanmaktır. Bu makale, Bash'te bir komutun gereksiz gecikme olmadan nasıl zaman aşımına uğrayacağını tartışacaktır.

Bash'te bir komutun zaman aşımı

Bash'te bir komutu zaman aşımına uğratmak için 'zaman aşımı' emretmek. 'timeout' komutu varsayılan olarak tüm sistemlerde mevcut değildir, ancak çoğu Linux dağıtımında paket yöneticisi kullanılarak kurulabilir, 'timeout' komutunun sözdizimi şöyledir:







zaman aşımı [ SEÇENEK ] SÜRE KOMUTU [ ARG ]


Burada 'SEÇENEK', timeout komutunun davranışını belirten isteğe bağlı bir bağımsız değişkendir, 'SÜRE', komutun çalışacağı süre sınırıdır ve 'KOMUT [ARG]', çalıştırmak istediğimiz komut ve argümanlarıdır.



Örneğin, 'sleep' komutunu beş saniye çalıştırmak istediğimizi ancak üç saniye sonra komutu zaman aşımına uğratmak istediğimizi varsayalım ve işte örnek kabuk betiği:



#!/bin/bash
Eko 'Uyku komutu 3 saniyelik zaman aşımı ile başlatılıyor...'
zaman aşımı 3s uyumak 5s
Eko 'Uyku komutu tamamlandı.'


Burada timeout süresini 3 saniye, “sleep” komutunun süresini 5 saniye olarak belirledim. 'Uyku' komutu normalde 5 saniye çalışsa bile, 'zaman aşımı' komutu 'uyku' komutunu 3 saniye sonra durduracaktır.






“timeout” komutunu kullanırken gereksiz gecikmeyi önlemek için “-k” seçeneğini kullanabiliriz. “-k” seçeneği, zaman aşımı sınırını aşarsa komuta gönderilecek bir sinyali belirtir. Bu sinyal, komutun düzgün bir şekilde bitmesini beklemek yerine, komutun hemen sonlanmasına neden olur.

Örneğin, “sleep” komutunu beş saniye çalıştırmak istediğimizi ancak üç saniye sonra komutu zaman aşımına uğratmak ve timeout sınırını aşarsa SIGINT sinyalini göndermek istediğimizi varsayalım. Bunu aşağıdaki komutu çalıştırarak yapabiliriz:



#!/bin/bash
Eko '3 saniyelik zaman aşımı ve 2 saniye sonra SIGINT sinyali ile uyku komutu başlatılıyor'
zaman aşımı -k 2s 3s uyku 5s
Eko '
Uyumak emretmek bitti. '


Burada timeout süresini 3 saniye ve timeout limitini aşarsa gönderilecek sinyali SIGINT olarak belirledim. “-k 2s” seçeneği, SIGINT sinyalinin zaman aşımı limitinden iki saniye sonra gönderilmesi gerektiğini belirtir.

Çözüm

Bash'te komut zaman aşımı, komutları daha verimli çalıştırmanıza ve gereksiz gecikmeleri önlemenize yardımcı olabilecek kullanışlı bir araçtır. 'timeout' komutunu ve '-k' seçeneğini kullanarak, bir komutun çalışabileceği süreyi sınırlayabilir ve zaman aşımı sınırını aşarsa hemen sonlandırmak için bir sinyal gönderebilirsiniz. Bu, zamandan tasarruf etmenize ve komut dosyalarınızı daha verimli bir şekilde çalıştırmanıza yardımcı olacaktır.