Я хочу запустить программу с SSH с использованием PHP, которая работает нормально, но теперь я хочу убить экран с помощью PHP, но единственное, что я знаю, это имя экрана. Как узнать идентификатор экрана (автоматически)?
Я хочу запустить программу с SSH с использованием PHP, которая работает нормально, но теперь я хочу убить экран с помощью PHP, но единственное, что я знаю, это имя экрана. Как узнать идентификатор экрана (автоматически)?
Ответы:
Вы можете использовать переменную окружения, $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.
Вы имеете в виду 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= )
screen
илиDISPLAY
?