Sim, isso tem a ver com a maneira como o stdout é armazenado por padrão no Linux. Você precisa executar explicitamente setbuf () no código para substituir esse comportamento.
Minha sugestão é evitar o nohup, se você estiver usando o bash shell, ele permitirá que você desassocie o comando do seu shell
$ ( my_cmd > ~/output.log 2>&1 & )
Você também pode usar disown
para um efeito semelhante em um trabalho em execução no momento.