GNU/Linux >> Tutoriels Linux >  >> Linux

Qu'advient-il de la sortie d'un processus qui a été désavoué et a perdu son terminal ?

Si je ferme le terminal virtuel, où un processus a été lancé, la sortie va-t-elle directement à /dev/null , ou peut-il polluer la mémoire d'une manière ou d'une autre ?
Puis-je de toute façon saisir la sortie pour continuer à la lire à tout moment par la suite ?

[EDIT] :Alors, le moment où je renie un processus est-il effectivement la fin de mon pouvoir de contrôler sa sortie ?

J'ai aussi remarqué, que si je renie un processus arrêté, au début tout semble normal :il n'est ni terminé ni affiché dans les jobs. Mais si je me déconnecte (et je ne le fais pas signifie fermer le terminal, il suffit de quitter su , par exemple), le processus est terminé. Néanmoins, un processus désavoué qui s'exécute en arrière-plan peut continuer à s'exécuter.

Réponse acceptée :

Le fait qu'un processus soit « désavoué » n'a de sens que pour le shell interactif qui a créé ce processus. Cela signifie que le shell n'inclut pas (plus) le processus dans sa table des tâches, et que SIGHUP ne sera pas envoyé à ce processus lorsque le shell se terminera. Ce n'est pas vraiment lié à vos questions.

À propos de ce qu'il advient des sorties envoyées à un terminal virtuel supprimé :j'ai fait quelques tests moi-même et j'ai remarqué que /dev/pts/x les périphériques ne sont pas accessibles et ne seront pas réalloués tant que tous les descripteurs de fichiers qui pointent vers eux n'auront pas été fermés. Donc, je ne vois pas pourquoi les écritures sur un terminal supprimé seraient stockées. Je suppose que ce n'est même pas défini par POSIX.

À propos de la récupération de la sortie d'un processus qui écrit sur un terminal, je ne pense pas que ce soit possible, même lorsque le terminal est toujours en vie¹. Tout ce que vous pouvez faire est de saisir l'entrée directe dans le terminal (c'est-à-dire les frappes au clavier ou les frappes au clavier simulées par la partie maître d'un pty). Si les processus lisaient sur stdin ce qui est écrit sur leurs terminaux, cela conduirait à une boucle d'auto-E/S pour la plupart des processus.

À propos de la dernière remarque sur la terminaison de processus, je ne sais pas vraiment ce qui se passe, mais je soupçonnerais des comportements plutôt étranges avec des signaux (SIGTTOU, SIGTTIN, SIGHUP, ou autres) liés à l'état de premier plan/arrière-plan des groupes de processus, lorsque la session le leader sort (par exemple su , dans le cas que vous avez mentionné).

Réponse à la Modifier : Non, en ce qui concerne la sortie, rien ne change lorsqu'un processus est désavoué :il est toujours attaché à son terminal de contrôle (à moins qu'il ne se soit déjà détaché comme le font les démons). Vous pouvez le voir en utilisant ps . Cependant, vous ne pourrez pas utiliser fg /bg /jobs commandes fournies par le shell pour ce processus. Cela signifie qu'il peut être difficile de l'alimenter avec l'entrée du terminal (nécessite d'être dans le groupe de processus de premier plan).

En relation :Suppression des caractères de contrôle (y compris les codes/couleurs de la console) de la sortie du script ?



Linux
  1. Quelle est la définition d'une session sous Linux?

  2. Quelle est la différence entre ls et l ?

  3. Quelle est la différence entre le noyau préemptif non préemptif, préemptif et préemptif sélectif ?

  4. Comment limiter les ressources totales (mémoire) d'un processus et de ses enfants

  5. Quelle est la différence entre kill , pkill et killall ?

Lire et écrire des données de n'importe où avec la redirection dans le terminal Linux

Comment obtenir l'entrée et la sortie d'un terminal dans un fichier texte ? ?

SIGTERM vs SIGKILL :Quelle est la différence ?

Quelle est la différence entre les chaînes OUTPUT et FORWARD dans iptables ?

Que se passe-t-il lorsqu'un fichier paginé à 100 % dans le cache de pages est modifié par un autre processus ?

Quelle est la différence entre unlink et rm ?