Header Ads

Como usar o comando de tempo limite no Linux

OK, isso é tempo suficiente no computador. Você pode dar limites de tempo aos processos, definindo um tempo máximo que eles podem executar com o comando timeout. Aqui está um tutorial para colocar limites na execução de programas com este comando.

O que faz o tempo limite para você? ?

O comando timeout permite que você defina um limite para o período de tempo durante o qual um programa será executado. Mas por que você quer fazer isso?

Um caso é quando você sabe exatamente quanto tempo deseja que um processo seja executado. Um caso de uso comum é ter o tempo limite para controlar um programa de registro ou de captura de dados para que os arquivos de log não devorem implacavelmente o espaço no disco rígido.

Outro caso é quando você não sabe por quanto tempo você quer que um processo seja executado, mas você sabe que não quer que ele seja executado indefinidamente. Você pode ter o hábito de configurar processos em execução, minimizar a janela do terminal e esquecê-los.

Alguns programas, até mesmo utilitários simples, podem gerar tráfego de rede em níveis que podem impedir o desempenho de sua rede. Ou eles podem amarrar os recursos em um dispositivo de destino, diminuindo seu desempenho. (ping, estou olhando para você.) Deixar esses tipos de programas em execução por longos períodos enquanto você está longe de seu computador é uma prática ruim.

O tempo limite faz parte do GNU Core Utils para Linux e Sistemas operacionais como o Unix, como o macOS, possuem timeout embutido. Não há nada para instalar; você pode usá-lo imediatamente.

Primeiros passos com o tempo limite

Este é um exemplo simples. Por exemplo, com suas opções de linha de comando padrão, o comando ping será executado até que você o pare pressionando Ctrl + C. Se você não interromper, vai continuar.

 ping 192.168.4.28 

Ao usar o tempo limite, podemos certifique-se de que o ping não seja executado, mastigue a largura de banda da rede e importunar qualquer dispositivo que esteja sendo pingado.

Este próximo comando usa o tempo limite para o ping com limite de tempo. Estamos permitindo 15 segundos de tempo de execução para ping.

 tempo limite 15 ping 192.168.4.28 

Após 15 segundos, o tempo limite termina o ping sessão e retornamos ao prompt de linha de comando.

Usando o tempo limite com outras unidades de tempo

Observe que não precisamos adicionar um “ s ”por trás do 15. timeout assume que o valor está em segundos. Você pode adicionar um “s”, mas isso realmente não faz diferença.

Para usar um valor de tempo medido em minutos, horas ou dias, adicione um “m”, um “h” ou um “d. ”

Para executar o ping por três minutos, use o seguinte comando:

 tempo limite 3m ping 192.168.4.28 

ping será executado por três minutos antes do tempo limite entrar e interromper a sessão de ping.

Limitando a captura de dados com tempo limite

Alguns arquivos de captura de dados podem crescer muito rapidamente. Para evitar que esses arquivos se tornem difíceis ou até mesmo problemáticos em tamanho, limite o tempo que o programa de captura pode executar.

Neste exemplo, estamos usando o tcpdump, uma ferramenta de captura de tráfego de rede. Nas máquinas de teste em que este artigo foi pesquisado, o tcpdump já estava instalado no Ubuntu Linux e no Fedora Linux. Ele tinha que ser instalado no Manjaro Linux e no Arch Linux, com o seguinte comando:

 sudo pacman -Syu tcpdump 

IMAGEM_6

Podemos rodar tcpdump por 10 segundos com suas opções padrão, e redireciona sua saída para um arquivo chamado capture.txt com o seguinte comando:

 timeout 10 sudo tcpdump > capture.txt 

(O tcpdump tem suas próprias opções para salvar o tráfego de rede capturado em um arquivo. Isso é um truque rápido porque estamos discutindo o tempo limite, não o tcpdump). / p>

O tcpdump começa a capturar o tráfego de rede e esperamos 10 segundos. E 10 segundos vem e vai e tcpdump ainda está em execução, e capture.txt ainda está crescendo em tamanho. Será preciso um Ctrl + C apressado para interromper o tcpdump.

Verificar o tamanho de capture.txt com ls mostra que ele cresceu para 209K em questão de segundos. Esse arquivo estava crescendo rapidamente!

 ls-lh capture.txt 

O que aconteceu? Por que o tempo limite do tcpdump não parou?

Tudo tem a ver com sinais.

Enviando o sinal certo

Quando o tempo limite interrompe um programa, ele envia o sinal Sinal SIGTERM. Isso educadamente pede ao programa para terminar. Alguns programas podem optar por ignorar o sinal SIGTERM. Quando isso acontece, precisamos dizer ao timeout que é um pouco mais forte.

Podemos fazer isso pedindo tempo limite para enviar o sinal SIGKILL.

O sinal SIGKILL não pode ser "capturado, bloqueado ou ignorado" - ele sempre passa. A SIGKILL não pede educadamente que o programa pare. SIGKILL esconde na esquina com um cronômetro e um cosh.

Podemos usar a opção -s (sinal) para informar ao tempo limite o envio do sinal SIGKILL.

Tempo limite

 s SIGKILL 10 sudo tcpdump > capture.txt 

Desta vez, assim que 10 segundos se passaram, o tcpdump está parado.

Perguntando Educadamente Primeiro

Podemos pedir tempo limite para tentar parar o programa usando SIGTERM e enviar SIGKILL somente se o SIGTERM não funcionar.

Para fazer isso, usamos o -k (matar depois) opção. A opção -k requer um valor de tempo como um parâmetro.

Neste comando, estamos pedindo tempo limite para que o dmesg seja executado por 30 segundos e, em seguida, termine com o sinal SIGTERM. Se o dmesg ainda estiver rodando após 40 segundos, significa que o SIGTERM diplomático foi ignorado e o timeout deve enviar o SIGKILL para terminar o trabalho.

O dmesg é um utilitário que pode monitorar as mensagens do buffer de anel do kernel e exibi-las uma janela de terminal.

 tempo limite -k 40 30 dmseg -w 

IMAGEM_11

O dmesg roda durante 30 segundos e pára quando recebe o sinal SIGTERM .

Sabemos que não foi o SIGKILL que parou o dmesg porque SIGKILL sempre deixa um obituário de uma só palavra na janela do terminal: “Morto.” Isso não aconteceu em neste caso.

Recuperando o código de saída do programa

Programas bem-comportados passam um valor de volta ao shell quando eles terminam. Isso é conhecido como um código de saída. Normalmente, isso é usado para informar o shell - ou qualquer processo que tenha iniciado o programa - se os problemas foram encontrados pelo programa durante a execução.

o tempo limite fornece seu próprio código de saída, mas talvez não nos importemos com isso. Provavelmente, estamos mais interessados ​​no código de saída do processo que o tempo limite está controlando.

Esse comando permite que o ping seja executado por cinco segundos. Ele está pingando um computador chamado Nostromo, que está na rede de teste que foi usada para pesquisar este artigo.

 tempo limite 5 ping Nostromo.local 

O comando é executado por cinco segundos e o tempo limite termina. Podemos então verificar o código de saída usando este comando:

 echo $? 

IMAGEM_14

O código de saída é 124. Este é o valor do tempo limite usa para indicar que o programa foi finalizado usando SIGTERM. Se o SIGKILL terminar o programa, o código de saída será 137.

Se interrompermos o programa com Ctrl + C, o código de saída do tempo limite será zero.

 timeout 5 ping Nostromo .local 

 echo $? 

IMAGEM_15

Se a execução do programa terminar antes do término, o tempo limite pode passar o código de saída do programa. de volta para o shell.

Para que isso aconteça, o programa deve parar por conta própria (em outras palavras, ele não é encerrado pelo tempo limite), e devemos usar o - preserve-status opção.

Se usarmos a opção -c (count) com um valor de cinco ping, só dispararemos cinco solicitações. Se dermos tempo limite de duração de um minuto, o ping terá terminado por si só. Podemos então verificar o valor de saída usando echo.

 tempo limite --preserva-status 1m ping -c 5 Nostromo.local 

 echo $? [/ PRE ] 

O ping conclui suas cinco solicitações de ping e termina. O código de saída é zero.

Para verificar se o código de saída está vindo do ping, vamos forçar o ping a gerar um código de saída diferente. Se tentarmos enviar solicitações de ping para um endereço IP inexistente, o ping falhará com um código de saída de erro. Em seguida, podemos usar o echo para verificar se o código de saída é diferente de zero.

 tempo limite - preserve-status 1m ping -c 5 NotHere.local 

 echo $? 

O comando ping, obviamente, não pode alcançar o dispositivo inexistente, por isso reporta o erro e fecha. O código de saída é dois. Este é o ping de código de saída usado para erros gerais.

Definindo Regras de Base

O tempo limite tem tudo a ver com fornecer alguns limites aos programas em execução. Se houver o perigo de os arquivos de log invadirem seu disco rígido ou se você esquecer que deixou uma ferramenta de rede em execução, coloque-os em tempo limite e deixe o computador se autorregular.

LEIA PRÓXIMO & rsaquo; A Stadia do Google está prestes a bater contra os limites de dados do ISP & rsaquo; Como desativar imagens nas sugestões de pesquisa da barra de endereços do Google Chrome & rsaquo; Por que o Windows 10 diz que sua rede Wi-Fi "não é segura" & rsaquo; Cartões de visita do Google Chrome: minha nova coisa favorita que eu não sabia que queria: rsaquo; Quão preocupado você deve estar com os riscos à saúde de 5G?

Via: How to Geek

Nenhum comentário