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

Foi útil?

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 )

  1. anexe ao seu processo usando gdb
  2. execute o seguinte no prompt do gdb para redirecionar stdout para /tmp/newfile

    $ print dup2(open("/tmp/novoarquivo",0), 1)

  3. execute o seguinte para redirecionar stderr para /tmp/newfile

    $ print dup2(open("/tmp/novoarquivo",0), 2)

  4. 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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top