Usando nohup e time com saídas diferentes

0

Eu quero executar um executável main e redirecionar todas as saídas para /dev/null , enquanto medi seu tempo de execução com time e gravar os resultados em runtime.out . Como a tarefa é longa, também tenho que executar a coisa toda com nohup .
tentei o seguinte: nohup time ./main &> /dev/null &> runtime.out &
Isso apenas mostra tudo para runtime.out . Eu não preciso da saída de main apenas o tempo de execução, salvo em um arquivo.

    
por D Nagy 09.05.2018 / 17:18

3 respostas

1

time tem algo feito para ser usado para isso:

nohup time -o runtime.out ./main &> /dev/null &

Se fosse um script e não exigisse um tty, prefiro usar setsid than nohup + & , porque ele "daemoniza" melhor e ainda pode receber um sinal HUP , se necessário.

setsid time -o runtime.out ./main </dev/null &>/dev/null

Observe também que aqui (como na pergunta do OP) time é /usr/bin/time , que tem um formato de saída diferente do comando builtin time do bash. Parece que /usr/bin/time --portability fornece uma saída semelhante, se necessário.

    
por 09.05.2018 / 23:39
1

Através de alguns testes & erro e roubar inspiração de tempo bash com nohup , eu inventei o seguinte:

$ nohup bash -c 'time ./main &> /dev/null' > runtime.out &
[1] 23178
nohup: ignoring input and redirecting stderr to stdout
$ 
[1]+  Done                    nohup bash -c 'time ./main &> /dev/null' > runtime.out
$ cat runtime.out 

real    0m0.004s
user    0m0.002s
sys     0m0.002s

Isso redirecionará stdout de time para runtime.out , imprimirá stdout de nohup no terminal e redirecionará stdout e stderr de main para /dev/null .

    
por 09.05.2018 / 18:40
0

Isso parece fazer a coisa certa:

$ time > runtime.out nohup ./main &> /dev/null &
    
por 09.05.2018 / 18:07