Existe uma maneira de restaurar/recuperar o nohup para ver a saída no console?
-
27-09-2019 - |
Pergunta
Eu sei que as chances são extremamente baixas, mas existe uma maneira de ver o que um processo nohup foi lançado recentemente?
Ainda tenho esse processo aberto, mas o executei redirecionando toda a saída para/dev/null.
Então, existe uma maneira de recuperar esse processo de volta ao console ou é inútil :(
Saúde
Solução
Existe uma maneira, mas não é simples, o truque é usar dup2 e depende do fato de seu programa estar vinculado à libc (o que seriam todos os aplicativos c/c++, mas um aplicativo java não seria, por exemplo )
- anexe ao seu processo usando gdb
execute o seguinte no prompt do gdb para redirecionar stdout para /tmp/newfile
$ print dup2(open("/tmp/novoarquivo",0), 1)
execute o seguinte para redirecionar stderr para /tmp/newfile
$ print dup2(open("/tmp/novoarquivo",0), 2)
- desanexe o gdb do seu processo e pronto
O que dup2 faz é
Duplicar um descritor de arquivo, isso significa que o stdout/stderr (1 e 2) e o novo descritor de arquivo retornado do aberto podem ser usados intercambiáveis, o que fará com que toda a saída que vá para stdout e stderr para ir ao arquivo que você abriu.