11

Я делаю сценарий Bash для моего использования. Как я могу запустить команду в течение определенного времени, например, 20 секунд и завершить команду? Я пробовал много решений, но ничего не работает, я также пробовал команду тайм-аута безуспешно. Пожалуйста, дайте мне какое-то решение для этого.

например: я хочу запустить эту команду в скрипте и терминале через 10 секунд

some command

3 ответа3

13

Хм, это должно сработать

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

xmessage предоставляет здесь быстрый тестовый пример (в вашем случае команда airodump должна идти туда); & ставит это на задний план.

$! содержит PID последнего запущенного процесса (см., например, https://stackoverflow.com/a/1822042/2037712); PID сохраняется в переменной pidsave .

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

4

Из командной строки Bash вы можете использовать "

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. Таким образом, вы можете использовать это для запуска нескольких процессов и уничтожения их всех одновременно через определенное время.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .