Processus suspendus sous Unix

1

question Unix pour débutant:

Je suis un peu confus quant à l'objectif des commandes suspendues (Ctr + Z) dans un shell Unix. D'après ce que je comprends, un processus / une commande suspendu n'est ni à l'arrière-plan ni (à l'évidence) au premier plan. Cependant - et je ne suis pas vraiment sûr à ce sujet mais c'est ce que mon bidouillage quotidien indique - un processus suspendu n'est pas "suspendu" car il se terminera (ou du moins "finira son travail") comme tout autre. Il ne veut tout simplement pas sortir au terminal.

Alors, quel est le but spécial (ou "mécanique" si vous préférez) de l'état suspendu? Pourquoi ne pas simplement arrière-plan et au premier plan?

Merci

[edit: Je me suis trompé dans mon hypothèse selon laquelle "un processus suspendu n'est pas" en pause "car il se terminera (ou du moins" finira son travail ") comme n'importe quel autre". Voir la réponse acceptée.]

biril
la source

Réponses:

2

Si vous suspendez un travail à l'aide de Ctrl+ Zil se met en pause, c'est-à-dire qu'il ne "terminera pas son travail". Vous pouvez utiliser bg pour le laisser continuer en arrière-plan (ce qui signifie qu'il peut toujours écrire dans stdout, mais ne peut pas lire depuis stdin). Je pense cependant que vous pouvez écrire un programme de manière à ignorer Ctrl+ Zou le manipuler d’une autre manière, sans en être sûr.

Si par contre vous souhaitez le lancer en arrière-plan, vous pouvez mettre un &après la commande dans le shell.

Voir aussi http://en.wikipedia.org/wiki/Job_control_%28Unix%29

kprist
la source
1
C'est exact. J'avais tort de supposer qu '"un processus suspendu n'est pas" suspendu "car il se terminera (ou du moins" finira son travail ") comme n'importe quel autre". Un processus suspendu est vraiment "suspendu", alors qu'un processus en arrière-plan s'exécute normalement.
biril
1

Il est utilisé pour permettre à un autre processus d'assumer le contrôle sur les entrées et les sorties standard. Il est également utilisé pour démarrer un autre processus dans le même shell.

Par exemple:

Lorsque vous utilisez un éditeur de texte qui occupe tout le terminal que vous tapez ^ Z, fermez-le temporairement et exécutez quelques commandes (déplacer des fichiers, changer de chanson, lancer un autre programme interactif). Lorsque vous avez terminé, vous reprenez la modification de votre fichier en apportant l'éditeur à nouveau.

Рослав Рахматуллин
la source
Un autre exemple utile serait un client de discussion qui occupe l’ensemble du terminal et que vous souhaitez désactiver pendant un moment tout en faisant autre chose.
рослав Рахматуллин
Ok, mais pourquoi l’état suspendu est-il préférable à l’arrière-plan pour ce genre de chose? Si je pouvais envoyer le processus de premier plan directement à l'arrière-plan (sans d'abord «suspendre»), pourquoi ne le ferais-je pas? Quelle est la valeur particulière de "suspendu" par rapport à "arrière-plan"?
Biril
Vous avez le moyen d’envoyer un processus directement à l’arrière-plan: commande esperluette, comme dans apt-get install whatnot &. Sinon, vous avez nohup programc'est différent. Et il y en a disownqui renverront tout ce qui est à l'arrière-plan. ^ Z est pratique pour les processus que vous souhaitez suspendre ou même déconnecter complètement du terminal après les avoir démarrés au premier plan.
рослав Рахматуллин