Como executar o aplicativo por um tempo definido no shell

12

Se e como é possível, em Terminal, fazer com que um aplicativo seja executado por 30 segundos, antes de ser forçado a fechar e ecoar os logs desse processo?

ir-g
fonte
@JacobVlijm Seria idealmente executado como um script de shell devido à portabilidade do idioma, principalmente porque a área de uso pretendida é um serviço de IC.
IR-g
1
@ ir-g você pode usar o comando timeout . por exemplo, comando timeout 30s
mcantsin

Respostas:

19

Você pode querer usar o comando timeout .

timeout -k 10s 30s command

que executará o comando por 30s e o matará após 10s, se ainda estiver em execução. - Verifique a página de manual para mais opções.

Mcantsin
fonte
1
@ ir-g, de nada. Você também pode querer conferir o comando watch , que é semelhante e também muito fácil de usar na linha de comando.
Mcantsin
2
Obrigado por esse ponteiro, watchme parece um comando muito interessante. Pode vir a calhar ...
ir-g
3

Aqui estão duas maneiras (mas o timeoutcomando sugerido por mcantsin é provavelmente melhor):

  1. Inicie o comando em segundo plano, para que seu PID seja salvo $!e você pode usá-lo para eliminá-lo após o tempo especificado:

    command &
    sleep 30 && kill $!
  2. Inicie o comando e use pkillou killallpara matá-lo. CUIDADO: Isso pressupõe que apenas um comando com esse nome esteja sendo executado, estou usando firefoxcomo exemplo:

    firefox &
    sleep 30 && pkill firefox

Não tenho idéia do que você quer dizer com "os logs desse processo", mas o erro padrão de um processo pode ser salvo em um arquivo command 2> logfile.txt.

Terdon
fonte