Вы можете получить PID сессий экрана здесь, как так:
$ screen -ls
There are screens on:
1934.foo_Server (01/25/15 15:26:01) (Detached)
1876.foo_Webserver (01/25/15 15:25:37) (Detached)
1814.foo_Monitor (01/25/15 15:25:13) (Detached)
3 Sockets in /var/run/screen/S-ubuntu.
Давайте предположим, что вы хотите PID программы работает в Bash в сеансе экрана foo_Monitor
.Используйте PID сеанса на foo_Monitor
экрана, чтобы получить PID сессии bash
работает в ней с помощью функции поиска идентификаторы PPID (Parent PID) для известного PID:
$ ps -el | grep 1814 | grep bash
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
0 S 1000 1815 1814 0 80 0 - 5520 wait pts/1 00:00:00 bash
Теперь получить только PID сессии bash
:
$ ps -el | grep 1814 | grep bash | awk '{print $4}'
1815
Теперь мы хотим, чтобы процесс был с , что PID. Просто гнездо команды, и на этот раз использовать -v
флаг на grep bash
, чтобы получить процесс, который не Баш:
echo $(ps -el | grep $(ps -el | grep 1814 | grep bash | awk '{print $4}') | grep -v bash | awk '{print $4}')
23869
Просто замените 1814 с реальным PID или ваш экран сессии:
echo $(ps -el | grep $(ps -el | grep SCREEN_SESSION_PID | grep bash | awk '{print $4}') | grep -v bash | awk '{print $4}')
Что случилось с 'экраном -ls'? – sarnold
.. и почему вы не можете сделать это по сценарию с помощью 'screen -ls'? – sarnold