So leiten Sie die Ausgabe eines laufenden Programms nach / dev / null um

19

Ich weiß, dass ich, um die Ausgabe eines Programms zu unterdrücken, es umleiten kann /dev/null, um beispielsweise alle Fehler- und Warnmeldungen von Chrom zu verbergen, das Programm so starten kann

chromium-browser 2> /dev/null &

Wenn ich jedoch die Fehlermeldungen vergesse und tippe

chromium-browser &

(Das ist ziemlich ärgerlich, wenn sie in der Mitte eines Befehls erscheinen.) Ich weiß nicht, was ich tun soll, außer die Anwendung zu stoppen und sie wieder richtig zu starten.

Kann ich die Fehlerausgabe irgendwie umleiten, ohne die Anwendung neu zu starten?

phunehehe
quelle

Antworten:

8

Sie können den Browser auch mit nohup starten und das Terminalfenster dann folgendermaßen schließen:

nohup chromium-browser &

Auf diese Weise wird der Browser gestartet und von der Konsole getrennt, die dann im Hintergrund geschlossen werden kann.

Lito
quelle
2
das ist akzeptabel, bis auf die Tatsache, dass ich daran denken muss, zu tippennohup
phunehehe
5
@phu Auf zsh kannst du zumindest setopt nohupdeine eintragen .zshrcund es wird nohup alles was du rennst ; Bei anderen Muscheln bin ich mir nicht sicher
Michael Mrozek
ja toll, ich mag es so!
Phunehehe
3
Oder Sie können ein Alias ​​erstellen ... Alias ​​Chrom = kein Chrom
Pablo Olmos de Aguilera C.
22

Dies wurde hier beantwortet: hier von vladr . Die Antwort lautet (zitiert):

  • Stellen Sie mit gdb eine Verbindung zu dem betreffenden Prozess her und führen Sie Folgendes aus:
  • p dup2 (open ("/ dev / null", 0), 1) (für stdout-Umleitung)
  • p dup2 (open ("/ dev / null", 0), 2) (für stderr-Umleitung)
  • ablösen
  • Verlassen

Ich habe es mit dem folgenden Skript versucht:

[Ausgabe nach erstem Kommentar:]

Sleep 10 #, damit ich die Zeit habe, mich an den Prozess zu binden
if ["$ sonorfather" == "father"] # Vermeiden Sie unendliche Rekursionen 
dann 
   sonorfather = son ./test & 
fi 

während wahr 
machen 
   echo "stdout $ sonorfather" 
   echo "stderr $ sonorfather"> & 2 
   schlaf 1 
getan 

Ich habe die Ausgabe von stderr deaktiviert, bevor der Prozess son erstellt wurde. Hier ist die Ausgabe:

stdout Vater 
stdout Sohn 
stdout Vater 
stdout Sohn 
[und so weiter...]. 

Ich hoffe das beantwortet deine Frage: der Sohn Prozess stderr wurde auch umgeleitet.

Mike Perdide
quelle
3
das war sehr gut, aber dann kann es sein, dass ich Probleme mit chrom habe, da es ohnehin einen neuen prozess für jede browser tab hervorbringt, um das zu lösen?
Phunehehe
Habe meinen Beitrag bearbeitet, um dir zu antworten.
Mike Perdide
Wie muss ich die Ausgabe umleiten, bevor die untergeordneten Prozesse erstellt werden? Vielen Dank für das Wissen, aber in Bezug auf die Komplexität würde ich einfach mit gehen nohup:)
Phunehehe
Technisch gesehen verliert dies doppelte Dateideskriptoren /dev/null, in der Praxis hat dies jedoch keine nennenswerten Auswirkungen.
Kevin
6

Sie können auch einen Alias ​​für chromium-browserdie Ausführung einrichtenchromium-browser 2> /dev/null

Wenn Sie beispielsweise bash verwenden, bearbeiten Sie /home/username/.bashrc und fügen Sie die folgende Zeile hinzu:

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

oder noch besser

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

und speichern Sie einige Tastenanschläge.

user1433
quelle