Come posso spostare un processo in background e anche silenziarne l'output?


11

Supponiamo che avvii un processo nel terminale e che invii l'output all'errore standard mentre è in esecuzione. Voglio spostare il processo in background e anche silenziarlo allo stesso tempo.

C'è un modo per farlo senza interrompere il processo e riavviarlo usando &e > /dev/null 2>&1? Mi chiedo se c'è qualche comando che esegue bg e può cambiare anche i descrittori di output del processo target.

Risposte:


9

Troppo tardi. Dopo l' avvio di un processo , la shell non ha più controllo sui descrittori dei file di processo , quindi non è possibile silenziarlo con un comando shell.

Puoi solo provare a uccidere un SIGHUPprocesso. Se il processo lo gestisce correttamente , dovrebbe staccarsi dal controllo di tty . Sfortunatamente, molti software non lo gestiscono correttamente e semplicemente muoiono.


non puoi fare CTRL + Z per mettere il processo in background? non mette a tacere il processo, e se esci, penso che uccida anche il processo.
Roy Rico,

1
@RoyRico, uccidendo una SIGSTOPad un processo (o come si dice di fare CTRL + Z ) non tacere un processo. Arresta un processo!
andcoz,

5

Il processo che viene eseguito da un terminale ha i suoi stdin, stdout e stderr legati al terminale e non puoi farci nulla senza riprendere il controllo su quel terminale ... Normalmente. Ma ci sono alcuni strumenti complicati che ti permettono davvero di farlo. Dai un'occhiata a questo esempio . E altri programmi come quelli rettymenzionati lì.


3

Non sono d'accordo con Andcoz che è troppo tardi per mettere a tacere l'output.

Supponendo che il processo sia in esecuzione in primo piano, utilizzare Ctrl-Zper sospendere il processo. In questo modo verrà riportato il numero del lavoro e l'ID del processo. È possibile andare avanti e spostare il processo in background utilizzando bg %1(per il lavoro n. 1). Anche se questo sposta il processo in background, non silenzia l'output. Per silenziare l'output è possibile utilizzare gdbper reindirizzare tutto l'output a /dev/null.

Questo è stato descritto molto bene in precedenza su /programming/593724/redirect-stderr-stdout-of-a-process-after-its-been-started-using-command-lin/593764#593764 .


0

Ancora un altro strumento da riga di comando è detach. L'ultima versione supporta la scrittura di file pid, l'utilizzo di file per stdin, stdout e stderr e l'esecuzione in primo piano. (Il sito web di detachdiscute anche strumenti simili.)

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

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.