Страницы

Поиск по вопросам

вторник, 9 июля 2019 г.

Как прервать запускаемую неинтерактивно программу?

Есть debian с некой утилитой, которая запускается "с руки" из консоли и умеет вычленять из tcp/ip-стека инфу по некой маске и далее через конвейер (pipeline) отдавать это в tcpdump который преобразует это в human readable format и отдаёт через конвейер прочим утилитам для работы с текстом (grep|awk|sed|strings|etc) ... в конце - результат перенаправляется в консоль.
Мне нужно всё это делать с помощью cron, но проблема в том, что пока этой утилите не пошлёшь KeyboardInterrupt она не освободит консоль и процесс не умрёт.
Собсно вопрос: Как-то можно сказать крону, либо bash'у , чтоб он через некоторое время прибивал бы этот процесс не костыляя ещё одного костыля?
Пример как "это" запускается:
$ stack_tmux -host 8.8.8.8 -port 53 | tcpdump -nl -s 0 -A -r - | strings | grep -v com | grep hello_world | cut -f 6 -d" " > /test.txt


Ответ

можно воспользоваться, например, программой timeout из gnu/coreutils
$ timeout 1.5 команда с аргументами
если команда с аргументами не завершится сама в течение полутора секунд, то ей будет послан сигнал TERM. можно указать и другой с помощью опции -s сигнал, например, требующийся вам -s HUP
$ timeout -s HUP 100 stack_tmux -host 8.8.8.8 -port 53 | tcpdump ...

подробнее: $ man timeout

Комментариев нет:

Отправить комментарий