Узнать идентификатор экрана

8

Я хочу запустить программу с SSH с использованием PHP, которая работает нормально, но теперь я хочу убить экран с помощью PHP, но единственное, что я знаю, это имя экрана. Как узнать идентификатор экрана (автоматически)?

TheWaveLad
источник
1
screenили DISPLAY?
Оли

Ответы:

10

Вы можете использовать переменную окружения, $STYчтобы определить, находитесь ли вы в сеансе экрана, а также в каком имени сеанса вы находитесь.

пример

Первоначально мы сидим в окне терминала, а не внутри сеанса экрана.

$ echo $STY

$

Ускорьте сеанс экрана:

$ screen -ls
There is a screen on:
    31543.tscrn (Detached)
1 Socket in /var/run/screen/S-saml.

Подключитесь к нему:

$ screen -r 31543.tscrn

Сессия внутри экрана:

$ echo $STY
31543.tscrn
$

Убить сеанс

С именем сессии вы можете убить его, используя screen.

$ screen -X -S tscrn kill

Вы также можете использовать номер там тоже.

$ screen -X -S 31543 kill

Подтвердите, что его убили:

$ screen -ls
No Sockets found in /var/run/screen/S-saml.
SLM
источник
1

Вы имеете в виду screenпрограмму? screen -lsотобразит экранные процессы вместе с их отображаемым именем, с добавлением идентификатора PID, с которого они работают:

screen -S foo
screen -ls

There are screens on:
    8806.foo        (09/08/13 20:05:22)     (Attached)

Вы можете использовать это, чтобы убить процесс:

kill -15 $(screen -ls | grep '[0-9]*\.foo' | sed -E 's/\s+([0-9]+)\..*/\1/')

В качестве альтернативы, если вы можете идентифицировать процесс php с помощью ps, тогда его родительский идентификатор будет отображаться на экране, и вы можете убить его. pgrep -U <myusername> -f <name>поможет найти php-процесс, который вы хотите найти (обратите внимание на тот, -fкоторый ищет аргументы команды, а также имя команды). Возможно, вы используете более одного php-скрипта, поэтому -fэто будет лучший механизм для соответствия вашему процессу. <myusername>будет вашим именем пользователя, <name>будет строкой, чтобы соответствовать процессу. Затем вы можете использовать, ps -p <pid> -o ppid=чтобы получить идентификатор процесса экрана и убить его.

kill -15 $( ps -p $(pgrep -U fooman -f foobar_process) -o ppid= ) 
Драв Слоан
источник