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


12

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


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

1
@ ir-g вы можете использовать команду timeout . например, команда timeout 30s
mcantsin

Ответы:


19

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

timeout -k 10s 30s command

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


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.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.