Existem (pelo menos) dois programas que fornecem essa funcionalidade:
NAME
timelimit
— effectively limit the absolute execution time of a processSYNOPSIS
timelimit [-pq] [-S killsig] [-s warnsig] [-T killtime] [-t warntime] command [arguments ...]
e
NAME
timeout
- run a command with a time limitSYNOPSIS
timeout [OPTION] DURATION COMMAND [ARG]...
timeout [OPTION]
Eles são empacotados da seguinte forma:
$ dlocate 'which timeout timelimit'
timelimit: /usr/bin/timelimit
coreutils: /usr/bin/timeout
Comparação:
/-----------------------------+------------+----------------\
| Feature | timelimit | timeout |
+=============================+============+================+
| time to run | -t time | first argument |
+-----------------------------+------------+----------------+
| terminate signal | -s signal | -s signal |
+-----------------------------+------------+----------------+
| grace period | -T time | -k time |
+-----------------------------+------------+----------------+
| kill signal | -S signal | (note 1) |
+-----------------------------+------------+----------------+
| propagate signals | -p | (note 2) |
\-----------------------------+------------+----------------/
Notas:
-
timeout
sempre usaSIGKILL
como sinal de último recurso. -
timeout
não tem nenhuma funcionalidade para sair com um sinal quando o programa filho faz isso.
O status de saída dos dois programas é diferente, mas isso é difícil de resumir nitidamente, então sugiro que você mesmo consulte as páginas do manual para isso.
Como timeout
está instalado em mais sistemas por padrão ( coreutils
é um pacote padrão em muitas distribuições), sugiro que você use isso a menos que você precise da funcionalidade extra fornecida por timelimit
.