Ich möchte ein Programm mit SSH mit PHP starten, was gut funktioniert, aber jetzt möchte ich den Bildschirm mit PHP beenden, aber das einzige, was ich weiß, ist der Name des Bildschirms. Wie finde ich die Bildschirm-ID (automatisch) heraus?
Ich möchte ein Programm mit SSH mit PHP starten, was gut funktioniert, aber jetzt möchte ich den Bildschirm mit PHP beenden, aber das einzige, was ich weiß, ist der Name des Bildschirms. Wie finde ich die Bildschirm-ID (automatisch) heraus?
Antworten:
Mithilfe der Umgebungsvariablen können Sie $STY
bestimmen, ob Sie sich in einer Bildschirmsitzung befinden und wie der Name der Sitzung lautet, in der Sie sich befinden.
Anfangs sitzen wir in einem Terminalfenster, nicht innerhalb einer Bildschirmsitzung.
$ echo $STY
$
Starten Sie eine Bildschirmsitzung:
$ screen -ls
There is a screen on:
31543.tscrn (Detached)
1 Socket in /var/run/screen/S-saml.
Verbinden Sie sich damit:
$ screen -r 31543.tscrn
Inside-Screen-Sitzung:
$ echo $STY
31543.tscrn
$
Mit dem Namen der Sitzung können Sie sie mit beenden screen
.
$ screen -X -S tscrn kill
Sie können die Nummer auch dort verwenden.
$ screen -X -S 31543 kill
Bestätigen Sie, dass es getötet wurde:
$ screen -ls
No Sockets found in /var/run/screen/S-saml.
Meinst du das screen
Programm? screen -ls
listet Bildschirmprozesse zusammen mit ihrem Bildschirmnamen auf, vorangestellt von der PID, von der aus sie ausgeführt werden:
screen -S foo
screen -ls
There are screens on:
8806.foo (09/08/13 20:05:22) (Attached)
Sie können das verwenden, um den Prozess abzubrechen:
kill -15 $(screen -ls | grep '[0-9]*\.foo' | sed -E 's/\s+([0-9]+)\..*/\1/')
Wenn Sie den PHP-Prozess mit ps identifizieren können, wird alternativ die übergeordnete ID auf dem Bildschirm angezeigt, und Sie können dies beenden. pgrep -U <myusername> -f <name>
wird helfen, den PHP-Prozess zu finden, den Sie suchen möchten (beachten Sie, -f
welche die Befehlsargumente sowie den Befehlsnamen durchsucht). Möglicherweise führen Sie mehr als ein PHP-Skript aus, sodass -f
dies ein besserer Mechanismus für Ihren Prozess ist. <myusername>
wäre Ihr Benutzername, <name>
wäre eine Zeichenfolge, die dem Prozess entspricht. Dann können Sie ps -p <pid> -o ppid=
die Bildschirm-Prozess-ID abrufen und diese beenden.
kill -15 $( ps -p $(pgrep -U fooman -f foobar_process) -o ppid= )
screen
oderDISPLAY
?