Finden Sie die Bildschirm-ID heraus

8

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?

TheWaveLad
quelle
1
screenoder DISPLAY?
Oli

Antworten:

10

Mithilfe der Umgebungsvariablen können Sie $STYbestimmen, ob Sie sich in einer Bildschirmsitzung befinden und wie der Name der Sitzung lautet, in der Sie sich befinden.

Beispiel

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
$

Eine Sitzung beenden

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.
slm
quelle
1

Meinst du das screenProgramm? screen -lslistet 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, -fwelche die Befehlsargumente sowie den Befehlsnamen durchsucht). Möglicherweise führen Sie mehr als ein PHP-Skript aus, sodass -fdies 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= ) 
Drav Sloan
quelle