Entspricht dem Befehl ctrl c zum Abbrechen eines Programms


74

Ich führe ein langes Linux-Programm auf einem Remote-Computer aus und möchte es stoppen. Mein Problem ist jedoch, dass das Programm beendet wird, wenn ich den Befehl kill verwende, ohne die Ergebnisse zu speichern. Normalerweise benutze ich Ctrl+ , um das Programm zu beenden. CIn diesem Fall speichert das Programm die Ergebnisse, aber im Moment bin ich nicht auf dem Computer, auf dem die Sitzung ausgeführt wird, sodass ich Ctrl+ nicht drücken kann C.

Meine Frage ist: Gibt es eine Möglichkeit, auf entfernte Weise das Äquivalent von Ctrl+ zu tun C?

Antworten:


108

Versuchen:

kill -SIGINT processPIDHere

Grundsätzlich wird Ctrl Cdas SIGINT(Interrupt-) Signal gesendet, während kill SIGTERMstandardmäßig das (Terminierungs-) Signal sendet, es sei denn, Sie geben das zu sendende Signal an.


Wie finde ich die processPID heraus? Ich benutze eine Web-Shell, um Ping auf meinem Router zu testen, und dann kann ich den Prozess nicht
Aero Wang

1
@AeroWang Sie können eine Prozesssuche pingwie folgt ausführen : ps aux | grep "ping"Die erste Zahl in der Spalte ist die PID.
AdrianTNT

Leider würden die Ping-Standardinformationen den menschlichen Input überwältigen. @adrianTNT
Aero Wang

Dies funktioniert auch unter OSX. Verwenden Sie einfach einen Signalcode anstelle eines Namens, da dieser in OSX INT ist. kill -2 PID
Nazar Grynko


4

Wenn Sie den lang laufenden Remote-Prozess steuern, können Sie einen Signal-Handler für SIGTERM installieren (siehe man signalund man sigactionund die vielen SO-Fragen zu diesem Thema), um vor dem Absterben eine ordnungsgemäße Bereinigung durchzuführen.

Das ist eine sehr häufige Sache.


4

Hier ist ein Beispiel für Mongod

So starten Sie den Daemon über die Befehlszeile:

mongod &

Dann später

kill -SIGINT `pgrep mongod`

0

Denken Sie auch in Ihrem Signal-Handler daran, dass es wie ein Interrupt-Handler ist, da Sie nur sehr eingeschränkt wissen, was Sie darin tun dürfen, ohne den Rest Ihres Programms zu beschädigen. Das Beste, was Sie hier tun können, ist, eine atomic_t "should_quit" -Variable festzulegen.


0

Ich mache wie folgt

killall -2 <ProgramName>

oder

kill -2 <PID of your process>

Ich habe den Namen des Signals vergessen. dh SIGINT / SIGKILL hier, also benutze ich eine Nummer dafür wie killall -2 oder killall -9

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.