Voglio iniziare un programma con SSH usando PHP, che funziona bene, ma ora voglio uccidere lo schermo con PHP, ma l'unica cosa che so è il nome dello schermo. Come faccio a scoprire l'ID dello schermo (automaticamente)?
Voglio iniziare un programma con SSH usando PHP, che funziona bene, ma ora voglio uccidere lo schermo con PHP, ma l'unica cosa che so è il nome dello schermo. Come faccio a scoprire l'ID dello schermo (automaticamente)?
Risposte:
È possibile utilizzare la variabile di ambiente $STY
per determinare se ci si trova in una sessione dello schermo e anche quale sia il nome della sessione in cui ci si trova.
Inizialmente siamo seduti in una finestra terminale, non all'interno di una sessione di schermo.
$ echo $STY
$
Centrifugare una sessione schermo:
$ screen -ls
There is a screen on:
31543.tscrn (Detached)
1 Socket in /var/run/screen/S-saml.
Connettiti ad esso:
$ screen -r 31543.tscrn
Sessione schermo interna:
$ echo $STY
31543.tscrn
$
Con il nome della sessione puoi ucciderlo usando screen
.
$ screen -X -S tscrn kill
Puoi anche usare il numero anche lì.
$ screen -X -S 31543 kill
Conferma che è stato ucciso:
$ screen -ls
No Sockets found in /var/run/screen/S-saml.
Intendi il screen
programma? screen -ls
elencherà i processi della schermata insieme al loro nome schermata, preceduto dal PID da cui sono in esecuzione:
screen -S foo
screen -ls
There are screens on:
8806.foo (09/08/13 20:05:22) (Attached)
Puoi usarlo per terminare il processo:
kill -15 $(screen -ls | grep '[0-9]*\.foo' | sed -E 's/\s+([0-9]+)\..*/\1/')
In alternativa, se riesci a identificare il processo php con ps, il suo ID genitore sarà schermo e puoi ucciderlo. pgrep -U <myusername> -f <name>
aiuterà a trovare il processo php che vuoi trovare (nota ciò -f
che cerca gli argomenti del comando e il nome del comando). Potresti eseguire più di uno script php, quindi -f
sarà un meccanismo migliore per abbinare il tuo processo. <myusername>
sarebbe il tuo nome utente, <name>
sarebbe una stringa per abbinare il processo da. Quindi è possibile utilizzare ps -p <pid> -o ppid=
per ottenere l'ID del processo dello schermo e ucciderlo.
kill -15 $( ps -p $(pgrep -U fooman -f foobar_process) -o ppid= )
screen
oDISPLAY
?