Comment rediriger la sortie d'un programme en cours d'exécution vers / dev / null


19

Je sais que pour supprimer la sortie d'un programme, je peux le rediriger vers /dev/null, par exemple pour cacher tous les messages d'erreur et d'avertissement de chrome, je peux démarrer le programme comme ceci

chromium-browser 2> /dev/null &

Cependant, s'il m'arrive d'oublier les messages d'erreur et de taper

chromium-browser &

(ce qui est assez gênant quand ils apparaissent au milieu d'une commande) Je ne sais pas quoi faire sauf arrêter l'application et la redémarrer correctement.

Puis-je en quelque sorte rediriger la sortie d'erreur sans redémarrer l'application?

Réponses:


8

Vous pouvez également lancer le navigateur avec nohup, puis fermer la fenêtre du terminal avec les éléments suivants:

nohup chromium-browser &

De cette façon, le navigateur se lancera et se détachera de la console, qui pourra ensuite être fermée silencieusement.


2
c'est acceptable, sauf pour le fait que je devrai me rappeler de tapernohup
phunehehe

5
@phu Sur zsh au moins vous pouvez mettre setopt nohupvotre .zshrcet il ne fera rien de tout ce que vous exécutez; Je ne suis pas sûr des autres obus
Michael Mrozek

oui, super, j'aime ça comme ça!
phunehehe

3
Ou vous pouvez créer un alias ... alias chrome = nohup chrome
Pablo Olmos de Aguilera C.

22

Cela a été répondu ici: ici par vladr . La réponse est (citant):

  • attachez-vous au processus en question à l'aide de gdb et exécutez:
  • p dup2 (ouvert ("/ dev / null", 0), 1) (pour la redirection stdout)
  • p dup2 (ouvert ("/ dev / null", 0), 2) (pour la redirection stderr)
  • détacher
  • quitter

Je l'ai essayé sur le script suivant:

[édition après le premier commentaire:]

dormir 10 # pour que je puisse avoir le temps de m'attacher au processus
si ["$ sonorfather" == "père"] # évite la récursion infinie 
ensuite 
   sonorfather = son ./test & 
Fi 

tout vrai 
faire 
   echo "stdout $ sonorfather" 
   echo "stderr $ sonorfather"> & 2 
   dormir 1 
terminé 

J'ai désactivé la sortie stderr avant la création du processus fils, voici la sortie:

père stdout 
fils stdout 
père stdout 
fils stdout 
[etc...]. 

J'espère que cela répond à votre question: le processus fils stderr a également été redirigé.


3
c'était très bien, mais alors je peux avoir des problèmes avec le chrome, car il engendre un nouveau processus pour chaque onglet du navigateur, de toute façon à résoudre?
phunehehe

Edité mon post pour vous répondre.
Mike Perdide

Il semblerait que je doive rediriger la sortie avant la création des processus enfants? Merci pour la connaissance, mais en ce qui concerne la complexité, j'irais avec nohup:)
phunehehe

Techniquement, cela laisse échapper des descripteurs de fichiers en double /dev/null, mais en pratique, cela n'affecte rien de manière significative.
Kevin

6

Vous pouvez également configurer un alias pour chromium-browserexécuter à la placechromium-browser 2> /dev/null

Par exemple, si vous utilisez bash, modifiez /home/username/.bashrc et ajoutez une ligne:

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

ou mieux encore

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

et enregistrez quelques frappes.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.