web-dev-qa-db-fra.com

ctrl c vs ctrl z avec travail de premier plan

Ctrl+Z arrête le travail alors que Ctrl+C tue le travail.

Pourquoi donc? Est-ce que l'autre sens n'aurait pas plus de sens?

z@z-lap:~$ sleep 100&
[1] 4458
z@z-lap:~$ sleep 200&
[2] 4459
z@z-lap:~$ jobs
[1]-  Running                 sleep 100 &
[2]+  Running                 sleep 200 &
z@z-lap:~$ fg %1
sleep 100
^Z
[1]+  Stopped                 sleep 100
z@z-lap:~$ jobs
[1]+  Stopped                 sleep 100
[2]-  Running                 sleep 200 &
z@z-lap:~$ fg %1
sleep 100
^C
z@z-lap:~$ jobs
[2]+  Running                 sleep 200 &
26
neo0

Je pense que vous pouvez être confus au sujet de la notation du contrôle des tâches. Notamment "Arrêté" signifie qu'un travail est toujours en vie mais que sa capacité à traiter quoi que ce soit a été maintenue (il n'y a pas de temps sur le CPU pour traiter quoi que ce soit). Il s'agit en fait d'un état "Pause" ou "Suspendu", bien que ce ne soit pas le terme technique correct.

  • CtrlC n'arrête pas un travail, il l'annule ou le tue. Techniquement, cela provoque l'envoi d'un signal d'interruption au programme lui disant d'interrompre ce qu'il fait et de quitter immédiatement. Certains programmes entendront ce signal et effectueront un nettoyage d'urgence sur eux-mêmes avant de quitter. D'autres ne répondent pas au signal et sont ensuite simplement interrompus.

  • CtrlZd'autre part, "arrête" un travail. Encore une fois, cela se fait avec un signal, mais cette fois, il s'agit d'un signal d'arrêt au lieu d'un signal d'interruption. Cela le met effectivement en attente et rend le contrôle au shell, mais ne tue pas réellement le travail. Si vous souhaitez qu'un tel travail continue de s'exécuter, vous pouvez alors exécuter une commande bg pour envoyer le dernier travail arrêté à l'arrière-plan. Il continuera ensuite à s'exécuter en tâche de fond comme si vous l'aviez exécuté avec & en premier lieu. Vous pouvez également utiliser fg pour reprendre le dernier travail arrêté au premier plan (lui permettant de continuer là où il s'était arrêté et vous permettant d'interagir à nouveau avec lui).

55
Caleb