Comment déplacer un processus en arrière-plan et désactiver également sa sortie?

11

Disons que je démarre un processus dans le terminal et qu'il envoie la sortie à l'erreur standard pendant qu'il s'exécute. Je veux déplacer le processus en arrière-plan et le faire taire en même temps.

Existe-t-il un moyen de le faire sans arrêter le processus et le redémarrer à l'aide de &et > /dev/null 2>&1? Je me demande s'il existe une commande qui exécute bg et peut également modifier les descripteurs de sortie du processus cible.

dan
la source

Réponses:

9

Trop tard. Après le démarrage d' un processus , le shell n'a plus de contrôle sur les descripteurs de fichiers de processus , vous ne pouvez donc pas le désactiver par une commande shell.

Vous ne pouvez qu'essayer de tuer un SIGHUPau processus. Si votre processus le gère correctement , il devrait se détacher du contrôle de tty . Malheureusement, de nombreux logiciels ne le gèrent pas correctement et meurent simplement.

andcoz
la source
ne pouvez-vous pas faire CTRL + Z pour mettre le processus en arrière-plan? cela ne fait pas taire le processus, et si vous vous déconnectez, je pense que cela tue aussi le processus.
Roy Rico
1
@RoyRico, tuer a SIGSTOPdans un processus (ou comme vous le dites en faisant CTRL + Z ) ne fait pas taire un processus. Ça arrête un processus!
andcoz
5

Le processus exécuté à partir d'un terminal a ses stdin, stdout et stderr liés au terminal et vous ne pouvez rien y faire sans reprendre le contrôle de ce terminal ... Normalement. Mais il existe des outils délicats qui vous permettent de le faire. Jetez un œil à cet exemple . Et d'autres programmes comme rettymentionné ici.

rozcietrzewiacz
la source
3

Je ne suis pas d'accord avec andcoz qu'il est trop tard pour faire taire la sortie.

En supposant que le processus s'exécute au premier plan, utilisez Ctrl-Zpour suspendre le processus. Cela signalera le numéro de tâche et l'ID de processus. Vous pouvez continuer et déplacer le processus en arrière-plan à l'aide de bg %1(pour le travail n ° 1). Bien que cela déplace le processus en arrière-plan, cela ne coupe pas le son de la sortie. Pour désactiver la sortie, vous pouvez utiliser gdbpour rediriger toutes les sorties vers /dev/null.

Cela a été très bien décrit précédemment sur /programming/593724/redirect-stderr-stdout-of-a-process-after-its-been-started-using-command-lin/593764#593764 .

Mike Covington
la source
0

Pourtant, un autre outil de ligne de commande est detach. La dernière version prend en charge l'écriture de fichiers pid, l'utilisation de fichiers pour stdin, stdout et stderr et l'exécution au premier plan. (Le site Web de detachtraite également d'outils similaires.)

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

Paul
la source