Come reindirizzare l'output di un programma in esecuzione su / dev / null


19

So che per sopprimere l'output di un programma posso reindirizzarlo /dev/null, ad esempio per nascondere tutti i messaggi di errore e di avviso dal cromo, posso avviare il programma in questo modo

chromium-browser 2> /dev/null &

Tuttavia, se mi capita di dimenticare i messaggi di errore e digitare

chromium-browser &

(che è abbastanza fastidioso quando appaiono nel mezzo di un comando) Non so cosa fare se non per fermare l'applicazione e avviarla di nuovo correttamente.

Posso in qualche modo reindirizzare l'output degli errori senza riavviare l'applicazione?

Risposte:


8

È inoltre possibile avviare il browser senza nohup e quindi chiudere la finestra del terminale con quanto segue:

nohup chromium-browser &

In questo modo, il browser si avvierà e si staccherà dalla console, che può quindi essere chiuso in modo silenzioso.


2
questo è accettabile, tranne per il fatto che dovrò ricordare di digitarenohup
phunehehe,

5
@phu Su zsh almeno puoi inserire il setopt nohuptuo .zshrce non verrà visualizzato tutto ciò che esegui; Non sono sicuro di altre conchiglie
Michael Mrozek

si, fantastico, mi piace così!
phunehehe,

3
Oppure puoi creare un alias ... alias chromium = nohup chromium
Pablo Olmos de Aguilera C.

22

Questa è stata risposta qui: qui da Vladr . La risposta è (citando):

  • collegarsi al processo in questione utilizzando gdb ed eseguire:
  • p dup2 (aperto ("/ dev / null", 0), 1) (per reindirizzamento stdout)
  • p dup2 (aperto ("/ dev / null", 0), 2) (per reindirizzamento stderr)
  • Staccare
  • smettere

L'ho provato sul seguente script:

[edizione dopo il primo commento:]

dormire 10 # in modo che io possa avere il tempo di collegarmi al processo
if ["$ sonorfather" == "father"] # evita la ricorsione infinita 
poi 
   sonorfather = son ./test & 
fi 

mentre vero 
fare 
   echo "stdout $ sonorfather" 
   echo "stderr $ sonorfather"> & 2 
   dormire 1 
fatto 

Ho disabilitato l'output stderr prima che il processo figlio fosse creato, ecco l'output:

padre stdout 
figlio stdout 
padre stdout 
figlio stdout 
[e così via...]. 

Spero che questa risposta alla tua domanda: anche il processo figlio Stderr è stato reindirizzato.


3
era molto buono, ma poi potrei avere problemi con il cromo, dato che genera un nuovo processo per ogni scheda del browser, comunque da risolvere?
phunehehe,

Ho modificato il mio post per risponderti.
Mike Perdide,

Sembra che dovrò reindirizzare l'output prima che vengano creati i processi figlio? Grazie per la conoscenza, ma per quanto riguarda la complessità andrei semplicemente con nohup:)
phunehehe

Tecnicamente, questo perde descrittori di file duplicati per /dev/null, ma in pratica ciò non influisce in modo significativo su nulla.
Kevin,

6

È inoltre possibile impostare un alias per chromium-browserl'esecuzione invecechromium-browser 2> /dev/null

ad esempio se stai usando bash, modifica /home/username/.bashrc e aggiungi la riga:

chromium-browser='chromium-browser 2> /dev/null'

o meglio ancora

chrome='chromium-browser 2> /dev/null'

e salva alcuni tasti.

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.