Убить процесс после того, как ему позволили какое-то время
8763
yael
Я хочу ограничить время, в течение которого grepкоманда процесса может выполняться или быть активной.
Например. Я хочу выполнить следующее:
grep -qsRw -m1 "parameter" /var
Но перед запуском grepкоманды я хочу ограничить продолжительность grepпроцесса, скажем, не более 30 секунд.
Как мне это сделать?
И если это возможно, как я могу вернуться или сбросить, чтобы не иметь ограничения по времени впоследствии.
ты не спрашивал это уже? http://stackoverflow.com/questions/3061377/grep-add-time-out-after-some-time-if-not-find-the-relevant-match
14 лет назад
3
Нет, это другой вопрос, потому что я не получаю ответ на вопрос.
14 лет назад
0
@yael: ранее вы получили очень хорошее решение, используя `timeout`, и даже получили инструкции о том, как его установить. Это грубо игнорировать этот ответ, а затем дублировать ваш вопрос.
Paul R 14 лет назад
4
извини но НЕТ я не хочу ничего устанавливать на свою систему THX yael
14 лет назад
0
у моего linux нет таймаута и я не могу его установить Yael
14 лет назад
0
@yael: тогда вам нужно * обновить исходный вопрос, чтобы включить это ограничение *, а НЕ просто дублировать вопрос и начать все заново
Paul R 14 лет назад
5
Взгляните также на [этот раздел часто задаваемых вопросов BASH.] (Http://mywiki.wooledge.org/BashFAQ/068)
Walter Mundt 14 лет назад
0
3 ответа на вопрос
10
feniix
Вы можете использовать timelimit, он доступен в Ubuntu по умолчанию или вы можете скомпилировать его самостоятельно.
timelimit выполняет команду и завершает порожденный процесс через заданное время с заданным сигналом. Сначала отправляется сигнал «предупреждение», затем, после тайм-аута, сигнал «убить», аналогично тому, как init (8) работает при выключении.
Это не в моем Ubuntus (10.10 рабочий стол, сервер 11.04), поэтому, вероятно, не по умолчанию. Но его легко схватить с помощью 'sudo aptitude install timelimit'. Прекрасно работает после установки.
Day 13 лет назад
2
По сути, он запускает поиск в фоновом режиме, затем запускает подоболочку, которая ждет 30 секунд, а затем убивает процесс поиска. Если поиск занимает <30 с, процесс уже будет мертв. Это не очень хорошая идея, чтобы убить процесс, который уже мёртв, потому что очень маловероятно, что кто-то еще будет повторно использовать pid, но для чего-то подобного это обычно нормально. Наконец, поиск возвращается на передний план и будет выполняться до тех пор, пока он не закончится или не будет уничтожен.
как получить $? от grep в этом случае, потому что в моем скрипте я беру $? из grep и проверьте, соответствует ли grep строке? Яэль
14 лет назад
0
Я не уверен, что есть простой способ сделать это. Кроме того, этот подход не работает в сценарии, где bash не имеет активного управления заданиями. Возможно, вам придется прибегнуть к небольшому количеству Perl-хакеров, чтобы выполнить работу в сценарии. Хм ...
Walter Mundt 14 лет назад
0
Возможно ли поступить этот вопрос в Perl? Яэль
14 лет назад
0
3
Jarvin
Создайте новый файл с именем «tgrep» и вставьте в него следующее (или назовите его как хотите):
Далее беги chmod a+x tgrep. Теперь, если вы хотите использовать его, вы можете напечатать
./tgrep -i "results" /home/dan/*txt
Или вы можете просто использовать его как tgrep (без ./ и иметь возможность использовать его из любого каталога), если вы поместите его в каталог, содержащийся в переменной $ PATH (например, / home / dan / bin /, если он находится в ваша переменная $ PATH, в противном случае вы можете добавить ее).