Как запустить приложение на определенное время в оболочке

12

Если и как можно Terminalзаставить приложение работать в течение 30 секунд, после чего его принудительно закроют и отобразят логи этого процесса?

ИК-г
источник
@JacobVlijm В идеале он будет работать как сценарий оболочки из-за переносимости языка, главным образом потому, что предполагаемая область использования - это служба CI.
ir-g
1
@ ir-g вы можете использовать команду timeout . например, команда timeout 30s
mcantsin

Ответы:

19

Возможно, вы захотите использовать команду timeout .

timeout -k 10s 30s command

который будет запускать команду в течение 30 секунд и убивать ее через 10 секунд, если она все еще выполняется. - Проверьте man-страницу для большего количества вариантов.

mcantsin
источник
1
@ ir-g, пожалуйста. Вы также можете проверить команду watch , которая похожа и очень проста в использовании в командной строке.
mcantsin
2
Спасибо за этот указатель, watchкажется мне очень интересной командой. Может пригодиться ...
ir-g
3

Вот два способа (но timeoutкоманда, предложенная mcantsin , вероятно, лучше):

  1. Запустите команду в фоновом режиме, таким образом, ее PID будет сохранен, $!и вы можете использовать его, чтобы убить ее через указанное время:

    command &
    sleep 30 && kill $!
  2. Запустите команду и используйте pkillили, killallчтобы убить ее. ВНИМАНИЕ: Предполагается, что выполняется только одна команда с таким именем, я использую firefoxв качестве примера:

    firefox &
    sleep 30 && pkill firefox

Я понятия не имею, что вы подразумеваете под «журналами этого процесса», но стандартная ошибка процесса может быть сохранена в файл с помощью command 2> logfile.txt.

terdon
источник