Como limitar um comando em bash sem atraso desnecessário

Como limitar um comando em bash sem atraso desnecessário

Em Bash, às vezes você pode precisar executar um comando que leva muito tempo para ser concluído, e você pode não querer esperar que termine indefinidamente. Uma solução para esse problema é usar um comando de tempo limite que limite a quantidade de tempo que um comando pode executar. Este artigo discutirá como alimentar um comando em bash sem atraso desnecessário.

Tempo limite um comando em Bash

Para limitar um comando em Bash, podemos usar o "tempo esgotado" comando. O comando "Timeout" não está disponível por padrão em todos os sistemas, mas pode ser instalado usando o gerenciador de pacotes na maioria das distribuições Linux, aqui está a sintaxe do comando "timeout":

Timeout [Opção] Comando de duração [Arg]


Aqui, a "opção" é um argumento opcional que especifica o comportamento do comando de tempo limite, "duração" é o prazo para a execução do comando, e "comando [arg]" é o comando e seus argumentos que queremos executar.

Por exemplo, digamos que queremos executar o comando "sono" por cinco segundos, mas queremos tempo limite o comando após três segundos e aqui está o exemplo do script do shell:

#!/BIN/BASH
eco "Comando inicial do sono com tempo limite de 3 segundos ..."
Tempo limite 3s dorme 5s
eco "Comando do sono terminado."


Aqui eu especifiquei a duração do tempo limite em 3 segundos e a duração do comando "sono" como 5 segundos. O comando "Timeout" interromperá o comando "Sleep" após 3 segundos, mesmo que o comando "Sleep" normalmente funcionasse por 5 segundos.


Para evitar um atraso desnecessário ao usar o comando "Timeout", podemos usar a opção "-k". A opção "-k" especifica um sinal que será enviado ao comando se exceder o limite de tempo limite. Este sinal fará com que o comando termine imediatamente, em vez de esperar que termine graciosamente.

Por exemplo, digamos que queremos executar o comando "Sleep" por cinco segundos, mas queremos tempo limite o comando após três segundos e enviar o sinal SIGINT se ele exceder o limite de tempo limite. Podemos fazer isso executando o seguinte comando:

#!/BIN/BASH
eco "Comando inicial do sono com tempo limite de 3 segundos e sinal sigint após 2 segundos”
Tempo limite -k 2s 3s dorme 5s
eco "Comando do sono terminado."


Aqui, especifiquei a duração do tempo limite como 3 segundos e o sinal a ser enviado como sigint se exceder o limite de tempo limite. A opção "-k 2s" especifica que o sinal SIGINT deve ser enviado após dois segundos do limite de tempo limite.

Conclusão

Tempo limite um comando no bash é uma ferramenta útil que pode ajudá -lo a executar comandos com mais eficiência e evitar atrasos desnecessários. Usando o comando "timeout" e a opção "-k", você pode limitar a quantidade de tempo que um comando pode executar e enviar um sinal para encerrá-lo imediatamente se exceder o limite de tempo limite. Isso ajudará você a economizar tempo e executar seus scripts com mais eficiência.