Perintah Bash Run untuk waktu tertentu?

12

Saya membuat skrip bash untuk saya gunakan. Bagaimana saya bisa menjalankan perintah untuk waktu tertentu, seperti 20 detik dan mengakhiri perintah? Saya mencoba banyak solusi tetapi tidak ada yang berhasil, saya juga mencoba perintah timeout tanpa hasil. Tolong beri saya solusi untuk ini.

misalnya: Saya ingin menjalankan perintah ini dalam skrip dan terminal setelah 10 detik

some command
Umair Riaz
sumber

Jawaban:

14

Hm, itu harusnya melakukan trik:

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

xmessagemenyediakan kasus uji cepat di sini (dalam kasus Anda perintah airodump harus pergi ke sana); &menempatkannya di latar belakang.

$!memegang PID dari proses yang dimulai terakhir (lihat misalnya https://stackoverflow.com/a/1822042/2037712 ); PID disimpan ke dalam variabel pidsave.

Setelah menunggu ( sleep), kirim TERMsinyal ke proses.

mpy
sumber
Terima kasih sobat bekerja tetapi Sekarang saya punya 1 masalah. Saya ingin melihat output yang dibuat oleh perintah tetapi windows xmessage tidak menunjukkan apa-apa.
Umair Riaz
@UmairRiaz: xmessage hanyalah sebuah contoh. Untuk mengadaptasi contoh Anda dalam pertanyaan dan mencatat output dari penggunaan perintah some command > logfile &di baris pertama. Setelah itu Anda bisa menganalisis logfile.
mpy
4

Dari bash prompt Anda dapat menggunakan "

Hennes
sumber
1

Cara lain adalah dengan menggunakan pola pgrep $, atau pola pkill $; mengembalikan semua PID yang cocok dengan pola yang diberikan, mencari seluruh proses yang berjalan pada mesin. Jadi untuk membatasi cakupan PID hanya untuk yang Anda miliki, gunakan: pgrep -P $ mypid $ pattern, atau pkill -P $ mypid $ pattern

Jadi untuk menjalankan proses latar belakang selama waktu yang ditentukan, skrip Anda akan terlihat seperti ini:

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

Perlu diingat bahwa ini akan mematikan semua proses dengan pola nama yang sama yang berjalan di bawah PID induk saat ini. Jadi Anda bisa menggunakan ini untuk memulai beberapa proses, dan membunuh semuanya secara bersamaan setelah waktu tertentu.

Paul
sumber