Basta adicionar um comando sleep
.
while true; do sleep 600; done
vai dormir por 10 minutos entre loops.
Eu estou procurando por um comando Linux que literalmente não faz nada, não produz nada, mas permanece vivo até ^C
.
while true; do; done
não é uma boa solução, porque exige muita CPU.
Se olharmos para chamadas de sistema , há uma que faz exatamente isso, pause
(2) :
pause()
causes the calling process (or thread) to sleep until a signal is delivered ...
Claro, precisamos apenas de um programa que use isso. Curta de compilar o programa C de duas linhas abaixo, a maneira mais fácil é provavelmente com Perl:
perl -MPOSIX -e pause
Em C:
#include <unistd.h>
int main(void) { return pause(); }
Desde que você mencionou ctrl-C, presumo que você queira usá-lo no terminal interativo. Então você pode apenas esperar pela entrada.
$ read
ou apenas use outros comandos arbitrários que leiam de stdin como cat
. Eles não fazem "nada", desde que não haja entrada.
$ cat >/dev/null
ou ainda melhor sem usar stdin:
$ tail -f <<EOF
EOF
O GNU sleep
e o sleep
incorporados de ksh93
(mas não mksh
) aceitam qualquer número de ponto flutuante, não apenas números inteiros, portanto, você pode fazer isso:
sleep infinity
você pode:
tail -f /an/existing/regular/file >/dev/null
Isso não usará stdin (como read
) e ficará aguardando nova adição em / an / existing / regular / file (não funciona em alguns arquivos: tail -f /dev/null
sairá imediatamente. Mas funcionará para todos os arquivos regulares.Se esse arquivo não está crescendo, o comando vai comer pouca cpu)
Não para sempre, mas há sleep
. Você poderia combinar seu loop while
com o modo de suspensão - nem parece fazer cócegas nos processadores no meu monitor gkrellm
.
dr01 tipos mais rápido do que eu :) ... então mais informações - o seu cpu spiking é porque ele tem que processar continuamente a verificação lógica, sem pausa entre ....
while true
do
sleep 100
done
Ou como um verso
while true; do sleep 100; done
Tags command-line