Historiquement, il y avait trois signaux liés à des frappes, ce sont
- SIGINT (Interruption) généralement Ctrl+ CouDel
- SIGQUIT - Quitter - Habituellement lié à Ctrl+\
- SIGSUSP Suspend - généralement lié à Ctrl+Z
Sur certaines versions de * nix, d'autres signaux sont également liés, vous pouvez vérifier les liaisons du clavier à l'aide de la commande
stty -a
Sur mon système, OS / X, cela produit la sortie suivante
speed 9600 baud; 65 rows; 213 columns;
lflags: icanon isig iexten echo echoe -echok echoke -echonl echoctl
-echoprt -altwerase -noflsh -tostop -flusho pendin -nokerninfo
-extproc
iflags: -istrip icrnl -inlcr -igncr ixon -ixoff ixany imaxbel iutf8
-ignbrk brkint -inpck -ignpar -parmrk
oflags: opost onlcr -oxtabs -onocr -onlret
cflags: cread cs8 -parenb -parodd hupcl -clocal -cstopb -crtscts -dsrflow
-dtrflow -mdmbuf
cchars: discard = ^O; dsusp = ^Y; eof = ^D; eol = <undef>;
eol2 = <undef>; erase = ^?; intr = ^C; kill = ^U; lnext = ^V;
min = 1; quit = ^\; reprint = ^R; start = ^Q; status = ^T;
stop = ^S; susp = ^Z; time = 0; werase = ^W;
Veuillez noter que tuer dans ce cas n'est pas un signal KILL mais qu'il s'agit de vider le tampon d'entrée actuel.
Vous pouvez avoir plus de succès avec l'arrêt des processus utilisant SIGQUIT, mais cela peut ne pas être vrai car le processus peut capter le signal et l'ignorer.
Il n'y a pas de concept de liste de processus "interrompus" car le processus a soit intercepté et ignoré l'interruption, soit s'est terminé. Vous pouvez obtenir une liste des processus suspendus en tapant des travaux
stty -ixon
manière à ce qu'ils soient passés. Je pense qu'ils changeraient pour<undef>
.Beaucoup de bonnes réponses, mais aucune qui soit complète.
Pour résilier avec un préjudice extrême et sans permettre au processus de vous arrêter, utilisez SIGKILL, qui n'est lié à aucune clé par défaut. Au lieu de cela, vous l'envoyez généralement à l'aide de la
kill (1)
commande et en spécifiant le signal à envoyer comme dansou mnémoniquement
Ce signal est géré directement par le système d'exploitation et le programme ne peut pas remplacer le comportement par défaut.
Si votre shell prend en charge le contrôle des tâches, il peut également prendre en charge une version intégrée
kill
qui prend en charge l'identification des tâches en utilisant le%
personnage comme dans la réponse de Catwalk .fg
en continuant à contrôler le terminal oubg
en le mettant en marche sans garder le contrôle du terminal (mais, par défaut, en y envoyant toujours sa sortie).la source
pour voir la liste des processus d'arrière-plan:
jobs
à tuer:
kill %1
(remplacez 1 par l'ID de travail correspondant comme dans lajobs
sortie)la source
Ctrl-C envoie SIGINT, qui par défaut provoque la fin d'un processus, mais peut être piégé (dans
\bin sh
, en utilisanttrap
).SIGKILL est le signal de mise hors tension impossible.
Edit Troisième fois, je pense que c'est vrai: j'ai tout vérifié par rapport aux documents. Nous verrons.
la source
Ce n'est pas clair pour la plupart des débutants de terminaux, mais si votre problème est simplement que vous êtes dans un programme interactif et que vous ne pouvez pas comprendre comment en sortir, cela se
q
terminera souvent . Par exemple, c'est la clé pour quitterless
, qui est également le programme que vous obtenez lorsque vous affichez desman
pages, entre autres.Certains programmes ont d'autres raccourcis clavier pour quitter. Dans
vim
ouvi
, utilisezESC:wq
. Dansemacs
, utilisezControl-C Control-X
. Dansnano
oupico
, utilisezControl-X
. Notez que dans ces exemples, il existe des subtilités, en particulier, pour savoir si ces raccourcis enregistrent ou non les modifications que vous avez apportées au fichier que vous modifiez.la source
De nombreux processus peuvent installer un gestionnaire d'interruptions pour intercepter le signal d'interruption, mais ceux qui ne sont pas abandonnés par défaut.
Pour forcer la fermeture d'un processus, vous pouvez envoyer SIGQUIT (Ctrl- \).
la source
Il semble que les autres réponses soient le scénario probable, mais il est également possible que vous exécutiez un script qui ne gère pas correctement ses enfants. J'ai récemment rencontré un scénario similaire, où la suppression d'un script ne tuerait pas les processus enfants de ce script.
En général, si vous vous trouvez dans cette situation, vous devrez revoir tous les processus que vous exécutez. Vous devriez consulter la page de manuel de ps. (
man ps
) J'aime particulièrement l'utilisationps auxwf
, qui montre la relation parent / enfant entre les processus.pstree
fait quelque chose de similaire. Vous devez l'exécuter à partir d'un autre terminal avant de tuer le processus pour voir à quoi les choses ressemblent dans la situation normale et identifier les processus enfants.Si vous tuez ensuite (avec ^ C) ce processus principal, vérifiez à nouveau la sortie de ps pour voir si quelque chose a changé. Si les processus enfants sont toujours là, vous pouvez les tuer avec la
kill
commande. (voirman kill
)la source