Was tun, wenn Strg-C den laufenden Job nicht beendet?

98

Manchmal ignorieren Prozesse das von Ctrl- Cin Bash gesendete SIGINT-Signal . Zum Beispiel manund vi. Angenommen, Sie möchten das Handbuch zum Beenden des laufenden Prozesses nicht googeln oder lesen. Gibt es eine Tastenfolge, die immer funktioniert (ohne das Terminal zu verlassen)?

Olivier Lalonde
quelle

Antworten:

141

Senden Sie das SIGQUIT- Signal mit Ctrl+ \.

.. $ sleep 10
^\Quit

→ Dies entspricht kill -3 pid. Programme, die im User-Space ausgeführt werden, ignorieren Sigquit nicht.

Es gibt auch eine Reihe von Tastenkombinationen für Magic SysRq . Eine der interessanteren ist dies: Alt+ SysRq+ k. Es beendet jeden Prozess auf der aktuellen virtuellen Konsole. Wenn einer Ihrer ttys vollständig und völlig kaputt ist, können Sie damit zurückgehen . Auf dem tty, auf dem X.org läuft, kann es verwendet werden, um X ohne Gnade zu töten.

Die SysRq-Taste ist bei den meisten Tastaturen dieselbe wie die Print-Taste. Auf meinem Notebook kann es mit der Fn-Taste aufgerufen werden. Dh Alt → Fn → Drucken → k in dieser Reihenfolge.

Hier sind einige der grundlegenden Verknüpfungen für die Prozessverwaltung:

  • Ctrl+ Z: pausiere einen Prozess (plus bg, um im Hintergrund fortzufahren , um in den fgVordergrund zu rücken)
  • Ctrl+ C: Bitte höflich darum, dass der Prozess jetzt beendet wird
  • Ctrl+ \: Beende gnadenlos den Prozess, der gerade im Vordergrund steht
  • Alt+ SysRq+ s: Schreiben von Daten auf der Festplatte (tun dies immer vor irgendetwas zu töten wichtig)
  • Alt+ SysRq+ s, k: Gnadenlos alle laufenden Prozesse auf einem bestimmten virtuellen Konsole töten
  • Alt+ SysRq+ s, b: Gnadenlos Neustart ohne Aushängen,
  • Alt+ SysRq+ r, e, i, s, u, b: Sicheres r eboot e Ven i f die s ystem ist u tterly b roken,

Hinweis: Ctrl+ Zim Gegensatz zu Ctrl+ Cund Ctrl+ \, funktioniert auch für man, vi, lessund dergleichen.

Im Zweifelsfall funktioniert fast immer das folgende Verfahren:

~$ sleep 10
^Z
[5]+  Stopped              sleep 10
~$ ps
  PID TTY          TIME CMD
 4804 pts/0    00:00:00 bash
 6207 pts/0    00:00:00 sleep
 6208 pts/0    00:00:00 ps
~$ kill -9 6207
[5]+  Killed                  sleep 10
~$ 

^ Z zeigt natürlich an, dass Ctrl+ Zgedrückt wurde.


Weitere Informationen zu Shells und Terminals finden Sie in meinen Antworten zu folgenden Themen:

Stefano Palazzo
quelle
3
Funktioniert für "sleep 10", funktioniert aber immer noch nicht für "man" oder "vi". Offensichtlich funktioniert "kill -9 pid", um beide Prozesse zu beenden. Vermisse ich etwas?
Olivier Lalonde
3
Strg + Z funktioniert mit Dingen wie less, man, vi und so weiter. Sie können sie dann töten, indem Sie a ausführen ps, um ihre Prozess-ID zu sehen und sie mit kill pidoder zu töten , wenn Sie sich nicht für andere Instanzen des Programms interessieren killall vi. In jedem Fall scheint Strg-Z immer zu funktionieren.
Stefano Palazzo
5
Sie können auch tun kill %%, um den letzten Job abzubrechen, kill %5wobei 5 die in angezeigte Jobnummer ist jobs.
Olivier Lalonde
2
Ctrl- \ sendet ein SIGQUIT , kein SIGKILL. Es gibt einige wichtige Unterschiede zwischen SIGQUIT und SIGKILL. en.wikipedia.org/wiki/SIGQUIT
Juliano
4
Wie drücke ich Ctrl+, \ wenn \ in meinem Tastaturlayout keine Taste vorhanden ist ?
Forivin
14

Sie können Ctrl+ versuchen\

Benjamin
quelle
1
Funktioniert weder mit mannoch mit vi.
Hippo
1
arbeitete ubuntu 16.04
kRazzy R
8

Manchmal CTRL+Cwird das an das falsche Programm oder den falschen Eingangskanal gesendet. Dies ist besonders häufig bei Editoren wie viBefehlen mit Pipe-Ausgabe, komplexen Bash-Befehlen mit Schleifen usw. der Fall.

Eine einfache und schnelle Lösung besteht darin, den Job auszusetzen CTRL+Zund ihn dann nach Jobnummer zu beenden : kill %1oder kill -9 %1usw.

tylerl
quelle
6
  • Versuchen Sie eine der folgenden Möglichkeiten:

    Ctrl+4

    Ctrl+\


  • Oder:

    Ctrl+ Zund dann laufen:

    kill %1

Wo %1ist die Zahl der Arbeit , die zurückgegeben wurde , wenn Sie gedrückt Control- Z. Hinzufügen -9, um den Kill zu erzwingen.


Wenn Sie sich in der Textkonsole befinden, können Sie auch Folgendes versuchen: Ctrl- SysRq. Der Kernel sollte den Prozess beenden.

Oder SysRq- k, alle Prozesse auf der aktuellen virtuellen Konsole beenden (kann auch X- und svgalib-Programme beenden).

Hinweis: Wenn magische SysRq-Tasten zum Beenden eines eingefrorenen Grafikprogramms verwendet werden, hat das Programm keine Möglichkeit, den Textmodus wiederherzustellen. Dies kann alles unlesbar machen.

Siehe: Magic SysRq-Taste und ihre Befehlskombinationen.

Kenorb
quelle
3

Um den Menschenq zu verlassen , benutze To leave vi use:q

Antivirtel
quelle
0

Es ist möglich, dass Sie die Kopierverknüpfung geändert haben von:

CTRL+ SHIFT+C

Zu

CTRL+C

Auf diese Weise funktioniert das CTRL+ Cnicht , wenn Sie versuchen, einen Prozess abzubrechen.

Versuchen Sie, die Kopierverknüpfung zu CTRL+ SHIFT+ zu ersetzen C.

Minter
quelle
1
Das Ändern der Kopierverknüpfung ist unerheblich, um den Abbruch eines Vorgangs zu erzwingen!
SuB
Können Sie bitte Ihre Antwort ein wenig erweitern? Schritt für Schritt wäre ideal, vor allem damit das OP Ihrem Vorschlag folgen kann. :)
ThatGuy
Das hat mir tatsächlich geholfen. Ich bin an STRG + C unter MacOS
gewöhnt
-1

Versuchen Sie Ctrl+ Alt+Backspace

Wenn Sie Ubuntu 10.04 verwenden, möchten Sie, dass dieser Schlüssel funktioniert.

Aktivieren Control- Alt-Backspace

Gehe zu System -> Einstellungen -> Tastatur

Wählen Sie die Registerkarte Layouts und klicken Sie auf die Layout - Optionen .

Wählen Sie Tastenfolge, um den X-Server zu beenden und Control+ Alt+ zuBackspace aktivieren .

Hinweis:

Drücken Sie Ctrl- Alt- Backspace, um den X-Server neu zu starten.

karthick87
quelle
Die Frage wurde bearbeitet, um zu verdeutlichen, dass ich den Vorgang im Terminal beenden möchte.
Olivier Lalonde