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.