Frage :Wie sende ich ein Signal an einen anderen Prozess? Können Sie mir alle verfügbaren Optionen erklären, um Signale an einen Prozess in einer UNIX-/Linux-Umgebung zu senden?
Antwort :Sie können mit einer der in diesem Artikel erläuterten Methoden verschiedene Signale an Prozesse senden.
1. Senden Sie mit Kill ein Signal an einen Prozess
Verwenden Sie den Befehl kill, um ein Signal an einen Prozess zu senden. Wenn Sie beispielsweise das USR1-Signal an den Prozess „a.out“ senden möchten, gehen Sie wie folgt vor.
$ ps -C a.out PID TTY TIME CMD 3699 pts/1 00:00:00 a.out $ kill -s USR1 3699
Hinweis :Siehe 4 Möglichkeiten, einen Prozess zu beenden – kill, killall, pkill, xkill.
2. Signal von einem anderen Prozess an einen Prozess senden
Sie können den UNIX-Systemaufruf kill (aus einem C-Programm) verwenden, um Signale von einem Prozess zu einem anderen zu senden. Das folgende C-Code-Snippet zeigt, wie der Kill-Befehl verwendet wird.
Der Kill-Systemaufruf benötigt zwei Argumente:1) die PID (Prozess-ID) des zu signalisierenden Prozesses 2) das Signal, das an den Prozess gesendet werden muss. Der Kill-Befehl gibt 0 zurück, wenn er erfolgreich ist.
int send_signal (int pid) { int ret; ret = kill(pid,SIGHUP); printf("ret : %d",ret); }
3. Signal von der Tastatur an einen Prozess senden
Wenn ein Prozess auf dem Terminal ausgeführt wird, können Sie über die Tastatur ein Signal an diesen Prozess senden, indem Sie eine bestimmte Tastenkombination verwenden. Im Folgenden finden Sie einige Beispiele.
- SIGINT (Strg + C) – Das wissen Sie bereits. Durch Drücken von Strg + C wird der laufende Vordergrundprozess beendet. Dies sendet das SIGINT an den Prozess, um ihn zu beenden.
- Sie können ein SIGQUIT-Signal an einen Prozess senden, indem Sie Strg + \ oder Strg + Y drücken
Sie können die Tastenzuordnungen anzeigen, die ein bestimmtes Signal an einen Prozess senden, indem Sie den Befehl „stty -a“ wie unten gezeigt verwenden.
$ stty -a | grep intr intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = M-^?; eol2 = M-^?;