Bash komutu belirli bir süre için çalıştırılsın mı?


12

Kullanımım için bash betiği yapıyorum. Bir komutu 20 saniye ve sonlandırma komutu gibi belirli bir süre için nasıl çalıştırabilirim? Çok fazla çözüm denedim ama hiçbir şey işe yaramadı, ayrıca zamanaşımı komutunu da denemedim. Lütfen bunun için bana bir çözüm verin.

örneğin: Bu komutu komut dosyasında ve terminalde 10 saniye sonra çalıştırmak istiyorum

some command

Yanıtlar:


14

Hım, bu hile yapmalı:

xmessage "Hello World" &
pidsave=$!
sleep 10; kill $pidsave

xmessageburada hızlı bir test durumu sağlar (sizin durumunuzda airodump komutu oraya gitmelidir); &arka plana koyar.

$!son başlatılan işlemin PID'sini tutar (bkz. örn. /programming//a/1822042/2037712 ); PID değişkene kaydedilir pidsave.

Biraz bekledikten sonra ( sleep), TERMişleme bir sinyal gönderin.


Teşekkürler dostum çalışıyor ama Şimdi 1 sorun var. Komut tarafından oluşturulan çıktıyı görmek istiyorum ama xmessage windows hiçbir şey göstermiyor.
Umair Riaz

@UmairRiaz: xmessage sadece bir örnektir. Sorudaki örneğinizi uyarlamak some command > logfile &ve ilk satırdaki komutun çıktısını kaydetmek için . Daha sonra analiz edebilirsiniz logfile.
mpy

4

Bash isteminden "

  • your_command & sleep 20; kill $!
  • Ya zaman aşımı komutu kullanın: Ör aptget install timeoutvetimeout -k 3m 14s your_command
  • Veya expectburada açıklandığı gibi kullanın : /unix/43340/how-to-intduce-timeout-for-shell-scripting
  • veya perl ile yapın: perl -e "alarm 10; exec @ARGV" "Your_command"
  • Veya bu daha şifreli çözümü kullanın: $COMMAND 2>&1 >/dev/null & WPID=$!; sleep $TIMEOUT && kill $! & KPID=$!; wait $WPID( Kaynak ve açıklama )

1

Başka bir yol pgrep $ desenini veya pkill $ desenini kullanmaktır; makinedeki tüm çalışan işlemlere bakarak verilen desene uyan tüm PID'leri döndürür. Bu nedenle, PID'lerin kapsamını yalnızca sahip olduğunuzlarla sınırlamak için şunu kullanın: pgrep -P $ mypid $ pattern veya pkill -P $ mypid $ pattern

Bu nedenle, belirli bir süre boyunca bir arka plan işlemi çalıştırmak için komut dosyanız aşağıdaki gibi görünür:

#!/bin/bash 
mypid=$$
run_something &
sleep $time_in_seconds
pkill -P $mypid something

Bunun, geçerli ana PID altında çalışan aynı ad modeline sahip tüm işlemleri öldüreceğini unutmayın. Böylece bunu birden fazla işlemi başlatmak ve belirli bir süre sonra hepsini aynı anda öldürmek için kullanabilirsiniz.


0

Ebay-alarm gibi bir komut satırı çalar saat kullanabilirsiniz

Çalar saat komut dosyasını yükleyin ve

ebay-alarm 10 sec -c some command &

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.