2009-02-05 6 views
54

Ich bin ein langes Programm in einem Remote-Computer ausgeführt, und ich möchte es beenden, aber mein Problem ist, dass wenn ich den Befehl kill dann das Programm ohne Speichern der Ergebnisse beendet wird . Normalerweise verwende ich ctrl c, um das Programm zu beenden, und in diesem Fall speichert das Programm die Ergebnisse, aber im Moment bin ich nicht in der Maschine, die die Sitzung ausführt, so dass ich ctrl c nicht tun kann.Äquivalent von Strg c in Befehl zum Abbrechen eines Programms

Meine Frage ist: Gibt es eine Möglichkeit, in einer entfernten Weise das Äquivalent von Ctrl c? Zu tun.

Antwort

79

Versuchen:

kill -SIGINT processPIDHere 

Grundsätzlich Ctrl C sendet die SIGINT (Interrupt-Signal) während Abtötung der SIGTERM (Terminierung) Signal standardmäßig sendet, wenn Sie das Signal geben zu senden.

+0

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 beenden ... –

+1

@AeroWang können Sie eine Prozesssuche für 'Ping' wie folgt ausführen:' ps aux | grep "ping" ', die erste Zahl in der Spalte ist die PID. – adrianTNT

+0

Leider würde die Ping Stdout Info den menschlichen Input überwältigen. @adrianTNT –

6

ctrl c sendet nur ein SIGINT-Signal, aber es gibt einige andere Signale, die etwas weicher sind. http://www.gnu.org/software/libtool/manual/libc/Termination-Signals.html

Ich denke, dass Sie den Kill-Befehl verwenden können, um ein anderes Signal zu senden. (siehe man für weitere Informationen töten)

+0

Upps Firas Assad schlug mich mit 35 Sekunden ... – Johan

+0

Wählte für falsche Informationen, die sogar die ganze Frage widerspricht. Strg + C sendet kein SIGKILL. SIGKILL bringt den Kernel dazu, den Prozess zu beenden, ohne vorher irgendein Signal an den Prozess gesendet zu haben. – ypnos

4

Wenn Sie den Langlauf Remote-Prozess steuern, können Sie einen Signal-Handler für SIGTERM installieren können (siehe man signal und man sigaction und die viele SO Fragen zu diesem Thema), zur Reinigung schön vor Sterben.

Das ist eine sehr häufige Sache zu tun.

0

Beachten Sie auch in Ihrem Signal-Handler, dass es wie ein Interrupt-Handler ist, in dem Sie sehr begrenzt sind, was Sie darin tun dürfen, ohne den Rest Ihres Programms zu korrumpieren. Das Beste, was Sie hier tun können, ist eine atomic_t "should_quit" Variable.