Нещодавно мені довелося це зробити. На переповнення стека я відповів, як знайти PID процесу, що працює на екрані . Коли у вас є PID, ви можете використовувати ps
для отримання команди. Ось зміст цієї відповіді з деяким додатковим вмістом для вирішення вашої ситуації:
Ви можете отримати 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 (батьківського 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
Ми можемо використовувати цей PID для пошуку команди (Подивіться в кінці другого рядка):
$ ps u -p 23869
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
dotanco+ 18345 12.1 20.1 5258484 3307860 ? Sl Feb02 1147:09 /usr/lib/foo
Зберіть це все разом:
$ ps u -p $(ps -el | grep $(ps -el | grep SCREEN_SESSION_PID | grep bash | awk '{print $4}') | grep -v bash | awk '{print $4}')