sleep é um comando muito popular e podemos começar a dormir a partir de 1 segundo:
# wait one second please
sleep 1
mas qual a alternativa se eu precisar esperar apenas 0,1 segundo ou entre 0,1 a 1 segundo?
- observação: no linux ou no OS X
sleep 0.XXX
funciona bem, mas no solarissleep 0.1
ousleep 0.01
- sintaxe ilegal
echo "" >/dev/null
Respostas:
O Bash tem um sono "carregável" que suporta segundos fracionários e elimina as despesas gerais de um comando externo:
Então:
A desvantagem é que os carregáveis podem não ser fornecidos com o seu
bash
binário, portanto você precisará compilá-los como mostrado (embora no Solaris não seja necessariamente tão simples como acima).A partir de
bash-4.4
(setembro de 2016), todos os carregáveis agora são construídos e instalados por padrão nas plataformas que o suportam, embora sejam construídos como arquivos de objetos compartilhados separados e sem.so
sufixo. A menos que sua distribuição / SO tenha feito algo criativo, você poderá fazer:(A página de manual implica que ela
BASH_LOADABLES_PATH
seja configurada automaticamente, acho que esse não é o caso na distribuição oficial a partir de 4.4.12. Se e quando estiver configurada corretamente, você precisará apenasenable -f filename commandname
conforme necessário.)Se isso não for adequado, a próxima coisa mais fácil a fazer é criar ou obter
sleep
do GNU coreutils, isso suporta o recurso necessário. Osleep
comando POSIX é mínimo, versões mais antigas do Solaris implementadas apenas isso. Solaris 11sleep
faz apoiar segundos fracionários.Como último recurso, você pode usar
perl
(ou qualquer outro script que tenha em mãos) com a ressalva de que a inicialização do intérprete pode ser comparável ao tempo de sono pretendido:fonte
expect
provavelmente pode usar "after N
", onde N é milissegundos, diretamente no seu script.usleep
como @Luis Vazquez e escrever @sebixA documentação para o
sleep
comando do coreutils diz:Daí você pode usar
sleep 0.1
,sleep 1.0e-1
e argumentos semelhantes.fonte
O modo de suspensão aceita números decimais para que você possa decompô-lo da seguinte maneira:
1/2 de segundo
1/100 de segundo
Então, por um milissegundo, você gostaria
fonte
sleep .5
Tente isso para determinar a precisão:
Combinação de solução de mr.spuratic e solução de Coles .
fonte
Você pode simplesmente usar
usleep
. Leva microssegundos (= 1e-6 segundos) como parâmetro; portanto, para dormir 1 milissegundo, você deve digitar:fonte
$ usleep
No command 'usleep' found, did you mean:
Command 'sleep' from package 'coreutils' (main)
usleep: command not found
usleep
parte doinitscripts
pacote, que é padrão pelo menos em todas as distribuições derivadas da Red Hat; incluindo pelo menos RHEL, CentOS, Fedora, Mageia / Mandriva e SuSE. Aqui está um exemplo: `` ``sleep
(do coreutils ) trabalha com segundos -usleep
(do initscripts ) trabalha com micro segundosEu tive o mesmo problema (sem uso de shell no Solaris), então escrevi o meu da seguinte maneira:
Não verifica argumentos - eu recomendaria um escrito corretamente se você quisesse mantê-lo, mas que (gcc usleep.c -o usleep) o tirará de um buraco.
fonte
usleep()
chamada simplesif(argc == 1) { usleep(atoi(argv[1])); }
para evitar a indexação fora dos limites da matriz, o que pode levar a qualquer número de comportamentos inesperados.if (argc == 2) { usleep(atoi(argv[1])); }
...usleep
unidade é μs; portanto, para aguardar 1 segundo, é necessário fornecer um argumento 1000000.atoi()
é uma escolha horrível para converter uma string em umint
. O queatoi( "STRING" )
retorna?atoi()
não tem como retornar nenhum erro.Gosto da ideia do sono, mas não posso comentar. Como isso me ajudou, espero que minha sugestão possa melhorar a idéia do sono.
https://github.com/fedora-sysv/initscripts/blob/3c3fe4a4d1b2a1113ed302df3ac9866ded51b01b/src/usleep.c é o código-fonte real para usleep.c no ecossistema redhat.
Tente compilar isso no seu Solaris. Você provavelmente precisaria de https://www.opencsw.org/packages/libpopt0/ .
fonte