Команда Bash Run протягом певного часу?


12

Я роблю сценарій bash для мого використання. Як я можу запустити команду протягом певного часу, наприклад 20 секунд та припинити команду? Я спробував багато рішень, але нічого не працює, я також спробував команду таймауту без успіху. Будь ласка, дайте мені рішення для цього.

наприклад: Я хочу запустити цю команду в скрипті та терміналі через 10 сек

some command

Відповіді:


14

Гм, це повинно зробити трюк:

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

xmessageнадає тут швидкий тестовий випадок (у вашому випадку команда airodump повинна туди перейти); &ставить його на другий план.

$!містить PID останнього запущеного процесу (див., наприклад, /programming//a/1822042/2037712 ); PID зберігається у змінній pidsave.

Після деякого очікування ( sleep), надішліть TERMсигнал процесу.


Дякую приятелю, це працює, але тепер у мене є 1 проблема. Я хочу бачити вихід, створений командою, але вікна xmessage нічого не показують.
Умаїр Ріас

@UmairRiaz: xmessage був лише прикладом. Щоб адаптувати свій приклад у запитанні та записати висновок команди, використовуйте some command > logfile &в першому рядку. Після цього ви можете проаналізувати logfile.
mpy

4

З підказки bash ви можете використовувати "

  • your_command & sleep 20; kill $!
  • Або скористайтеся командою тайм-аут: Напр. aptget install timeoutІtimeout -k 3m 14s your_command
  • Або використовуйте, expectяк пояснено тут: /unix/43340/how-to-introduce-timeout-for-shell-scripting
  • або робити це за допомогою perl: perl -e "alarm 10; exec @ARGV" "Your_command"
  • Або скористайтеся цим більш виразним рішенням: $COMMAND 2>&1 >/dev/null & WPID=$!; sleep $TIMEOUT && kill $! & KPID=$!; wait $WPID( Джерело та пояснення )

1

Інший спосіб - використовувати pgrep $ pattern або pkill $ pattern; повертає всі PID, що відповідають заданому шаблону, переглядаючи всі запущені процеси на машині. Отже, щоб обмежити область застосування PID лише тими, якими ви володієте, використовуйте: pgrep -P $ mypid $ pattern або pkill -P $ mypid $ pattern

Отже, щоб запустити фоновий процес протягом встановленого проміжку часу, ваш сценарій виглядатиме приблизно так:

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

Майте на увазі, що це знищить усі процеси з тим самим іменем, що працює під поточним батьківським PID. Таким чином, ви можете використовувати це для запуску декількох процесів і вбивати їх усі одночасно через певний час.


0

Ви можете використовувати будильник командного рядка, як ebay-alarm

Встановіть сценарій будильника і зробіть

ebay-alarm 10 sec -c some command &

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.