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