Di recente ho dovuto farlo. Su Stack Overflow ho risposto a come trovare il PID del processo in esecuzione sullo schermo . Una volta che hai il PID puoi usare ps
per ottenere il comando. Ecco i contenuti di quella risposta con alcuni contenuti aggiuntivi per affrontare la tua situazione:
Puoi ottenere il PID delle sessioni dello schermo qui in questo modo:
$ 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.
Supponiamo che tu voglia il PID del programma in esecuzione in Bash nella foo_Monitor
sessione dello schermo. Utilizzare il PID della foo_Monitor
sessione dello schermo per ottenere il PID della bash
sessione in esecuzione cercando i PID (PID padre) per il PID noto:
$ 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
Ora ottieni solo il PID della bash
sessione:
$ ps -el | grep 1814 | grep bash | awk '{print $4}'
1815
Ora vogliamo il processo con quel PID. Basta annidare i comandi e questa volta usa il -v
flag grep bash
per ottenere il processo che non è bash:
$ echo $(ps -el | grep $(ps -el | grep 1814 | grep bash | awk '{print $4}') | grep -v bash | awk '{print $4}')
23869
Possiamo usare quel PID per trovare il comando (Guarda la fine della seconda riga):
$ 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
Metterli tutti insieme:
$ ps u -p $(ps -el | grep $(ps -el | grep SCREEN_SESSION_PID | grep bash | awk '{print $4}') | grep -v bash | awk '{print $4}')