11

Я хочу ограничить время, в течение которого команда процесса grep может запускаться или работать.

Например. Я хочу выполнить следующее:

grep -qsRw -m1 "parameter" /var

Но перед запуском команды grep я хочу ограничить продолжительность работы процесса grep , скажем, не более 30 секунд.

Как мне это сделать?

И если это возможно, как я могу вернуться или сбросить, чтобы не иметь ограничения по времени впоследствии.

3 ответа3

10

Вы можете использовать timelimit, он доступен в Ubuntu по умолчанию или вы можете скомпилировать его самостоятельно.

timelimit выполняет команду и завершает порожденный процесс через заданное время с заданным сигналом. Сначала отправляется сигнал «предупреждение», затем, после тайм-аута, сигнал «убить», аналогично тому, как init(8) работает при выключении.

6

Вот немного хакерский удар для этого:

grep -qsRw -m1 "parameter" /var &

GREPPID=$!

( sleep 30; kill $GREPPID ) &

fg $GREPPID

По сути, он запускает поиск в фоновом режиме, затем запускает подоболочку, которая ждет 30 секунд, а затем убивает процесс поиска. Если поиск занимает <30 с, процесс уже будет мертв. Это не очень хорошая идея, чтобы убить процесс, который уже мёртв, потому что очень маловероятно, что кто-то еще будет повторно использовать pid, но для чего-то подобного это обычно нормально. Наконец, поиск возвращается на передний план и будет выполняться до тех пор, пока он не закончится или не будет уничтожен.

3

Создайте новый файл с именем "tgrep" и вставьте в него следующее (или назовите его как хотите):

#!/bin/bash
grep $@ &
PID=$!
sleep 30 && kill $PID 2>/dev/null &
wait $PID
exit 0

Затем запустите chmod a+x tgrep . Теперь, если вы хотите использовать его, вы можете напечатать

./tgrep -i "results" /home/dan/*txt

Или вы можете просто использовать его как tgrep (без ./ и иметь возможность использовать его из любого каталога), если вы поместите его в каталог, содержащийся в переменной $ PATH (например, / home / dan / bin /, если он находится в ваша переменная $ PATH, в противном случае вы можете добавить ее).

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