Scopri quale comando è in esecuzione all'interno di una sessione dello schermo


10

Lascio spesso le attività in esecuzione all'interno dello schermo in modo da poterle controllare in seguito, ma a volte ho bisogno di controllare quale comando è in esecuzione all'interno dello schermo. Di solito è una specie di script php, come

screen -d -m nice -n -10 php -f convertThread.php start=10000

Non registro quali schermate eseguono il comando, ma mi piacerebbe avere un'idea dei progressi compiuti controllando quale comando è stato eseguito al suo interno, senza uccidere il processo.

Non vedo alcuna opzione per questo nelle pagine di aiuto dello schermo.

Risposte:


18

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 psper 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_Monitorsessione dello schermo. Utilizzare il PID della foo_Monitorsessione dello schermo per ottenere il PID della bashsessione 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 bashsessione:

$ 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 -vflag grep bashper 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}')

Oh, intelligente! Mi piace! Poiché questo risponde direttamente alla domanda, accetterò questa risposta. Lo apprezzo! Sorry @Ghanima (: '
Austin Burk,

7

Che ne dici di usare screen -S <your-fancy-name>per dare alle sessioni dello schermo nomi significativi in ​​base ai comandi che eseguono? I nomi verranno elencati con screen -lse utilizzati per riprendere una sessione entro screen -r <your-fancy-name>.

Modifica per aggiungere:

Da quando è stato portato alla mia attenzione solo l'altro giorno. tmuxoffre lo stesso set di funzionalità di screen(se non addirittura di più) e viene fornito con una funzionalità adatta alle tue esigenze. Dalle FAQ: "tmux supporta automaticamente la ridenominazione di Windows nell'applicazione in esecuzione senza gravi hack che utilizzano sequenze di escape. È attivo anche per impostazione predefinita."

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.