J'ai cherché des réponses et jusqu'à présent, je n'ai rien trouvé pour répondre à ma question. Je me connecte actuellement à mon serveur Ubuntu et lors de l'exécution d'un processus, je ne peux exécuter aucune des interruptions sur celui-ci. Voici mon stty -a:
user@Ubuntu1:~$ stty -a
speed 38400 baud; rows 93; columns 200; line = 0;
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = M-^?; eol2 = M-^?;
swtch = <undef>; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R; werase = ^W; lnext = ^V;
flush = ^O; min = 1; time = 0;
Je n'ai rien dans mon .bashrc qui change les interruptions.
C'est la même chose pour tous les utilisateurs, y compris root. J'ai également essayé de me connecter à partir de différents emplacements en utilisant différents terminaux et à chaque fois que le même résultat apparaît. J'ai utilisé à la fois ssh et ssh -X pour me connecter.
Edit: Localement, toutes mes interruptions fonctionnent bien.
Mise à jour: je cherche toujours une réponse. Mon ami a exactement le même problème. Le problème semble être que lorsque vous vous connectez (depuis un PC, un Mac ou un Linux), le clavier ne récupère pas ces touches (même s'il est correctement mappé).
la source
Ctrl+V
et frapperCtrl+C
? Avez-vous essayé de tuer le processus aveckill -s 2 <pid_of_process>
? Cela doit être égal à l'envoi du signal SIGINT au processus. Vérifiez les paramètres de clé de votre émulateur de terminal.Ctrl+C
tout en exécutant un autre processus (par exemplecat
)? C'est peut-être ce processus qui ignoreCtrl+C
. Ou voulez-vous dire que localement sur le serveur Ubuntu, ce processus particulier répondCtrl+C
, auquel cas, dans quel terminal avez-vous essayé? Et unescreen
session?kill -s 2
(notez le-s 2
, c'estSIGINT
(le signal qui est généralement envoyé lorsque vous appuyez sur Ctrl + C, la valeur par défautkill
estSIGTERM
)), alors la commande n'ignore pas l'interruption. Quelque chose d'autre le ramasse. Lorsque vous l'exécutez localement et que cela fonctionne, dites-vous que cela fonctionne en utilisant le même terminal sur la machine cliente pour exécuter quelque chose en local, ou en exécutant un émulateur de terminal localement sur la machine serveur? Je me demande si vous utilisez un émulateur qui essaie d'imiter Ctrl + C du monde Windows ...Réponses:
ctrl+ cne tue jamais un programme,
Ce n'est tout simplement pas ce qu'il fait.
Il existe un ensemble de signaux définis par la norme POSIX, qui sont utilisés pour contrôler un programme en cours d'exécution.
- http://man7.org/linux/man-pages/man7/signal.7.html
ctrl+ cenvoie le signal
2
"Interruption du clavier" au programme que vous avez exécuté à partir d'un terminal.C'est entièrement au programme de gérer ce signal, il peut faire ce qu'il veut à ce sujet. De nombreux interprètes de langage de script peuvent gérer cela de manière par défaut en tuant le script appelé et en quittant avec élégance.
Si vous voulez qu'un programme se termine, en particulier à partir d'un contexte automatique, le singal 15 est recommandé, le
kill
programme peut être utilisé pour envoyer des signaux à un processus par id (pid).Autant que je sache, le programme reçoit toujours ce signal lui-même et devrait terminer ASAP aussi proprement qu'il le peut.
Si le programme ignore le signal 15 cependant, et le programme persiste à vivre (et vous ne manquez pas d'envoyer le signal en raison d'une erreur d'autorisation)
Le signal 9, à ma connaissance, est interprété par le noyau (le gestionnaire de tâches et l'interface matérielle), le noyau arrête brusquement le traitement du programme et désalloue / libère toutes ses ressources.
la source
Voici une astuce hardcore:
il suspendra votre processus et vous renverra l'ID de travail de ce processus
Alors:
(remplacez 1 par votre ID de travail).
Remarque: le pourcentage est obligatoire!, Sinon vous tuerez votre processus d'initialisation, ce qui signifie que vous tuerez le noyau et que tout le système plantera (alors ne mettez pas d'espace entre les deux :)
la source
Ctrl + c ne tuera pas le processus. cela arrêtera simplement le processus en cours d'exécution au milieu. Pour tuer le processus, nous devons utiliser la commande "KILL"
la source
kill
envoie un signal à un processus. Ne le tue pas. Le signal par défaut envoyé aveckill
estTERM
, le signal envoyé avecctrl+c
estSIGINT
.Je suis tombé sur ce vieux post du forum sur ce problème particulier. Il semble que la séquence d'interruption par défaut puisse être remplacée dans un fichier de configuration séparé quelque part.
Si vous cherchez simplement à tuer ce processus en externe, vous pouvez utiliser kill, sachez que vous devez escalader le kill comme indiqué dans cet article sur les processus de kill , plutôt que de simplement passer au kill le plus extrême -9.
Wikipedia est une excellente ressource pour le programme kill . Voici également une liste des signaux Unix et ce qu'ils font.
la source