Ich habe nach Antworten gesucht und bisher nichts gefunden, um meine Frage zu beantworten. Ich melde mich derzeit bei meinem Ubuntu-Server an und kann beim Ausführen eines Prozesses keinen der Interrupts darauf ausführen. Hier ist mein 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;
Ich habe nichts in meiner .bashrc, was die Interrupts ändert.
Dies ist für alle Benutzer einschließlich root gleich. Ich habe auch versucht, mich von verschiedenen Standorten aus mit verschiedenen Terminals anzumelden, und jedes Mal wird das gleiche Ergebnis angezeigt. Ich habe sowohl ssh als auch ssh -X verwendet, um mich anzumelden.
Bearbeiten: Vor Ort funktionieren alle meine Interrupts einwandfrei.
Update: Ich suche noch eine Antwort. Mein Freund hat genau das gleiche Problem. Das Problem scheint sehr zu sein, dass die Tastatur beim Anmelden (von PC, Mac, Linux) diese Tasten nicht aufnimmt (obwohl sie korrekt zugeordnet sind).
quelle
Ctrl+V
und schlagenCtrl+C
? Haben Sie versucht, den Prozess mit zukill -s 2 <pid_of_process>
beenden? Dies sollte dem Senden des SIGINT-Signals an den Prozess entsprechen. Überprüfen Sie die Einstellungen Ihres Terminalemulatorschlüssels.Ctrl+C
während eines anderen Prozesses zu schlagen (z. B.cat
)? Vielleicht ist es dieser Prozess, der ignoriertCtrl+C
. Oder meinst du damit, dass dieser bestimmte Prozess lokal auf dem Ubuntu-Server reagiertCtrl+C
. In welchem Fall haben Sie es in welchem Terminal versucht? Was ist mit einerscreen
Sitzung?kill -s 2
( man beachte das-s 2
, dass derSIGINT
(das Signal , das in der Regel gesendet wird, wenn Sie Strg + C treffen, die Standardeinstellung fürkill
istSIGTERM
)), dann wird der Befehl nicht den Interrupt ignoriert. Etwas anderes nimmt es auf. Wenn Sie dies lokal ausführen und es funktioniert, sagen Sie, dass es mit demselben Terminal auf dem Clientcomputer funktioniert, um etwas lokal auszuführen, oder wenn Sie einen Terminalemulator lokal auf dem Servercomputer ausführen? Ich frage mich, ob Sie einen Emulator verwenden, der versucht, Strg + C aus der Windows-WeltAntworten:
ctrl+ ctötet niemals ein Programm,
Das ist einfach nicht das, was es tut.
Es gibt eine Reihe von Signalen, die der POSIX-Standard definiert. Diese dienen zur Steuerung eines laufenden Programms.
- http://man7.org/linux/man-pages/man7/signal.7.html
ctrl+ csendet das Signal
2
"Interrupt von Tastatur" an das Programm, das Sie von einem Terminal aus ausgeführt haben.Es liegt ganz beim Programm, dieses Signal zu verarbeiten. Es kann tun, was es will. Viele Skriptsprachendolmetscher können dies standardmäßig behandeln, indem sie das aufgerufene Skript beenden und ordnungsgemäß beenden.
Wenn Sie möchten, dass ein Programm beendet wird, insbesondere aus einem automatischen Kontext, wird Singal 15 empfohlen. Das
kill
Programm kann verwendet werden, um Signale per ID (pid) an einen Prozess zu senden.Soweit mir bekannt ist, empfängt das Programm dieses Signal immer noch selbst und sollte so schnell wie möglich so sauber wie möglich beendet werden.
Wenn das Programm jedoch Signal 15 ignoriert und das Programm weiterhin aktiv ist (und Sie das Signal aufgrund eines Berechtigungsfehlers nicht senden können)
Signal 9 wird, soweit mir bekannt ist, vom Kernel (dem Task-Manager und der Hardwareschnittstelle) interpretiert. Der Kernel stoppt abrupt die Verarbeitung des Programms und gibt die Zuweisung / Freigabe aller seiner Ressourcen auf.
quelle
Hier ist ein Hardcore-Trick:
Dadurch wird Ihr Prozess angehalten und Sie erhalten die Job-ID dieses Prozesses
Dann:
(Ersetzen Sie 1 durch Ihre Job-ID).
Hinweis: Der Prozentsatz ist obligatorisch! Andernfalls wird Ihr Init-Prozess beendet, was bedeutet, dass Sie den Kernel beenden und das gesamte System abstürzt (setzen Sie also kein Leerzeichen dazwischen :)
quelle
Strg + C beendet den Vorgang nicht. Es stoppt nur den aktuell laufenden Prozess in der Mitte. Um den Prozess abzubrechen, müssen wir den Befehl "KILL" verwenden
quelle
kill
sendet ein Signal an einen Prozess. Tötet es nicht. Das mit gesendete Standardsignalkill
istTERM
, das mit gesendete Signalctrl+c
istSIGINT
.Ich bin auf diesen alten Forumsbeitrag zu diesem speziellen Thema gestoßen. Es scheint, dass die Standard-Interrupt-Sequenz irgendwo in einer separaten Konfigurationsdatei überschrieben werden könnte.
Wenn Sie diesen Prozess nur extern beenden möchten, können Sie kill verwenden. Achten Sie jedoch darauf, dass Sie kill töten, wie in diesem Artikel zum Beenden von Prozessen beschrieben , anstatt einfach zum extremsten Kill -9 zu springen.
Wikipedia ist eine großartige Ressource für das Kill-Programm . Auch hier ist eine Liste der Unix-Signale und was sie tun.
quelle