Como posso mover um processo para o segundo plano e também silenciar sua saída?

11

Digamos que eu inicie um processo no terminal e ele envie a saída para erro padrão enquanto é executado. Quero mover o processo para segundo plano e também silenciá-lo ao mesmo tempo.

Existe uma maneira de fazer isso sem parar o processo e iniciá-lo novamente usando &e > /dev/null 2>&1? Gostaria de saber se existe algum comando que executa bg e também pode alterar os descritores de saída do processo de destino.

dan
fonte

Respostas:

9

Muito tarde. Depois que um processo é iniciado, o shell não tem mais controle sobre os descritores de arquivos do processo, portanto você não pode silenciá- lo por um comando do shell.

Você só pode tentar matar um SIGHUPno processo. Se o seu processo o manipular corretamente , ele deve desanexar do controle de tty . Infelizmente, muitos softwares não lidam com isso corretamente e simplesmente morrem.

andcoz
fonte
você não pode fazer CTRL + Z para colocar o processo em segundo plano? não silencia o processo e, se você sair, acho que também mata o processo.
Roy Rico
1
@RoyRico, matar um SIGSTOPpara um processo (ou como você diz que faz CTRL + Z ) não silencia um processo. Para um processo!
andcoz
5

O processo que é executado a partir de um terminal tem seu stdin, stdout e stderr vinculado ao terminal e você não pode fazer nada a respeito sem recuperar o controle sobre esse terminal ... Normalmente. Mas existem algumas ferramentas complicadas que realmente permitem que você faça isso. Dê uma olhada neste exemplo . E outros programas como os rettymencionados lá.

rozcietrzewiacz
fonte
3

Eu discordo de andcoz que é tarde demais para silenciar a saída.

Supondo que o processo esteja sendo executado em primeiro plano, use Ctrl-Zpara suspender o processo. Isso reportará o número do trabalho e a identificação do processo. Você pode prosseguir e mover o processo para o segundo plano usando bg %1(para o trabalho nº 1). Embora isso mova o processo para o segundo plano, ele não silencia a saída. Para silenciar a saída, você pode usar gdbpara redirecionar toda a saída para /dev/null.

Isso foi muito bem descrito anteriormente em /programming/593724/redirect-stderr-stdout-of-a-process-after-its-been-started-using-command-lin/593764#593764 .

Mike Covington
fonte
0

Ainda outra ferramenta de linha de comando é detach. A versão mais recente suporta a gravação de arquivos pid, usando arquivos para stdin, stdout e stderr e executando em primeiro plano. (O site detachtambém discute ferramentas semelhantes.)

http://inglorion.net/software/detach/

Paulo
fonte