2008-12-04 6 views
8

Ich entwickle meine Anwendung (unter Linux) und leider hängt es manchmal. Ich kann Ctrl+C verwenden, um sigint zu senden, aber mein Programm ignoriert sigint, weil es zu weit weg ist. So habe ich den Prozess tötet-Tanz zu tun:Wie bindet man einen Schlüssel an sigkill in bash?

Ctrl+Z 
$ ps aux | grep process_name 
$ kill -9 pid 

Gibt es eine Möglichkeit bash zu konfigurieren, das Kill-Signal für den aktuellen Prozess zu senden, wenn ich drücke - sagen - Ctrl+Shift+C?

Antwort

2

Da es für SIGKILL keinen gebundenen Schlüssel gibt, können Sie einen Alias ​​erstellen, um etwas Tipparbeit zu sparen, wenn SIGQUIT es nicht für Sie schneidet. Zunächst wird der

Ctrl+Z 
$ ps aux | grep process_name 
$ kill -9 pid 

Tanz zusammengefasst werden kann (wenn es nur eine Instanz des Prozesses ist, dass Sie töten wollen) als

Ctrl+Z 
$ pkill -9 process_name 

, wenn Ihr Anwendungsfall geht immer zu suspendieren dann töten, Sie können einen Alias ​​erstellen der letzte Prozess lief wie

$alias pks="pkill -9 !!:0" 

in diesen Alias ​​in Ihrer ~/.bash_profile zu töten.

+1

Statt dessen laufen Sie die Kill% , die den letzten Job tötet verwenden könnte – flolo

+0

das ist nicht überall funktioniert, flolo –

+1

Unter Linux löscht killall process_name alle Prozesse mit diesem Namen. Vorsicht: killall auf Solaris und anderen Unixen tötet alle Prozesse. – ataylor

6

Ich glaube nicht, dass es einen Schlüssel gibt, den Sie verwenden können, um ein SIGKILL zu senden.

Wird SIGQUIT stattdessen tun? Wenn Sie dies nicht abfangen, wird standardmäßig der Prozess dediziert. Standardmäßig ist dies^\. Sie können dies sehen, indem Sie:

$ stty -a 

in einem Terminal anzeigen. Es sollte sagen:

quit = ^\ 
+0

Wie funktioniert das? Wenn ich eine neue Terminal-Anwendung schreibe, sollte ich darüber Bescheid wissen oder wird sie auf einer niedrigeren Ebene behandelt? –

+0

Es wird auf der tty-Ebene im Kernel behandelt. Wenn er den Beendigungsschlüssel sieht, sendet er ein SIGQUIT an den Vordergrundprozess an diesem Terminal. Sie können SIGQUIT abfangen, wenn Sie es stoppen möchten, aber Core-Dumps auf Anfrage sind sehr nützlich. – camh

3

Sie können durch Drücken von^\ ein SIGQUIT Signal an den aktuellen Vordergrundprozess senden

Sie können auch (standardmäßig Sie stty -a ausführen können den aktuellen Wert für quit zu sehen.) die letzte backgrounded Prozess von der Shell töten durch

$ kill %%