Was bewirkt kill -USR1 %1?

Was bewirkt kill -USR1 %1?

Ich habe unten zwei Befehle und ich weiß nicht, was sie tun.

Was bewirken diese Befehle jeweils?

kill -USR1 %1
kill $(pidof vlc)

Antwort1

kill -USR1 %1sendet das „benutzerdefinierte Signal Nr. 1“ (auch bekannt als „SIGUSR1“) an den ersten Hintergrund-Kindprozess des aktuellen Shell-Prozesses. Wenn dieser Hintergrundprozess eine Signalhandlerfunktion für das USR1-Signal eingerichtet hat, wird diese Funktion ausgeführt. Wenn der Zielprozess keinen Signalhandler für dieses Signal hat, wird der Zielprozess beendet.

kill $(pidof vlc)sendet das Signal „Beenden“ (SIGTERM) an den vlcProzess.

Lassen Sie uns das gesamte Szenario durchgehen, das OP in einem Kommentar zu einer anderen Antwort beschrieben hat:

Ein Benutzer öffnet ein neues Fenster mit einer Unix-Shell auf seinem Desktop und startet zwei Programme wie folgt:
emacs &

Dadurch wird der Emacs-Texteditor im Hintergrund gestartet und zum ersten Hintergrundjob (%1) gemacht.

vlc ti2_intro.mp4

Dadurch wird der VLC-Videoplayer im Vordergrund gestartet, um das ti2_intro.mp4Video abzuspielen.

Während die Datei Videoti2_intro.mp4 abgespielt wird, drückt der Benutzer im Shell-Fenster Strg-Z.

Dies unterbricht den untergeordneten Vordergrundprozess, also VLC. Das bedeutet, dass VLC vorübergehend angehalten, aber nicht beendet wurde. Es befindet sich in einem angehaltenen Zustand. Es ist jetzt ein Prozess %2.

Nun [gibt sie] den Shell-Befehl ein jobs,

Dadurch kann sie sehen, welche Kindprozesse an diesen Shell-Prozess angehängt sind. Wahrscheinlich werden sie emacsals %1und vlcals aufgeführt.%2

gefolgt von:
bg %2

Dadurch wird VLC im Hintergrund fortgesetzt, sodass das Video weiterhin abgespielt werden kann, ohne die Shell zu blockieren. Während der Wiedergabe kann sie also weitere Shell-Befehle eingeben.

kill -USR1 %1

Dies sendet das „benutzerdefinierte Signal 1“ an emacs. Emacs lässt Benutzer ihre eigenen Signalhandler definieren, daher ist es schwer zu wissen, was dieses Signal getan hat, ohne die Details ihrer Emacs-Konfiguration zu kennen. Es wird oft verwendet, um den Debugger in der Emacs-Lisp-Programmierumgebung „elisp“ auszulösen.

Etwas später gibt sie den Shell-Befehl ein [ich glaube, OP hat hier einen Befehl ausgelassen?] und drückt dann Strg-C.

Es ist unklar, welchen Befehl OP hier möglicherweise ausgelassen hat, aber ich vermute, dass sie einen Befehl ausgeführt hat, der nicht sofort beendet wurde, und ihn dann mit Strg+C beendet hat.

Kurz darauf gibt sie im selben Shell-Fenster folgende Befehle ein:
kill $(pidof vlc)

Dadurch wird der VLC-Prozess beendet.

Antwort2

kill beendet einen aufgelisteten Prozess (oder sendet ein Signal an den Prozess mit der Aufforderung, sich selbst zu beenden).

Im ersten Fall wird ein Signal an den Prozess gesendet, das ihn auffordert, sich selbst zu beenden (was er nur tun wird, wenn er so programmiert wurde - ein so programmiertes Programm räumt hinter sich auf und beendet sich). %1 bedeutet "job1" Job1 ist ein Prozess, der im Hintergrund läuft und mit Ihrer aktuellen Sitzung verknüpft ist (sieheWas bedeutet „töte %1“?)

Im zweiten Fall sucht der Befehl nach den Prozess-IDs des VLC und beendet sie.

verwandte Informationen