Como logar STDOUT de um processo em background sem buffering no Mac?

0

Estou executando um processo em segundo plano no Mac e tenho um problema com a atualização de log. Se eu correr

someprog > mylog &

então mylog é atualizado não imediatamente, mas com alguns intervalos - eu acho que é devido ao buffering. Se eu matar o programa antes que a saída seja gravada no log, perderei os dados. Não houve esse problema com o mesmo programa em máquinas Linux, então espero poder atualizá-lo em tempo de execução no Mac também. Alguma ideia de como?

someprog é um programa F77, que não foi escrito por mim.

    
por Andrei 21.09.2010 / 14:27

2 respostas

1

Uma solução é usar o comando de espera unbuffer , que redireciona a saída para um pseudoterminal. Em sistemas operacionais semelhantes a UNIX, a saída do terminal é buffer de linha, enquanto a saída não terminal é armazenada em buffer (4k na estação de trabalho do OpenBSD)

$ sysctl hw.pagesize       
hw.pagesize=4096

Veja também

por 28.09.2011 / 21:35
0

O programa myprog é um aplicativo que você mesmo escreveu?

Nesse caso, você pode forçá-lo a liberar os buffers de saída em cada declaração de gravação. A saída é armazenada em buffer na maioria dos casos, por padrão, para evitar E / S excessiva, mas, nesse caso, parece que você deseja obter tudo imediatamente.

    
por 21.09.2010 / 15:29