Existe um comando do Linux que não faz nada, mas nunca sai? [duplicado]

13

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.

    
por srigi 19.05.2017 / 15:51

6 respostas

17

Basta adicionar um comando sleep .

while true; do sleep 600; done

vai dormir por 10 minutos entre loops.

    
por 19.05.2017 / 15:56
23

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(); }
    
por 19.05.2017 / 16:40
14

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
    
por 19.05.2017 / 16:08
10

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
    
por 19.05.2017 / 17:39
6

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)

    
por 19.05.2017 / 16:23
5

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

    
por 19.05.2017 / 15:57