Lista processos sendo executados dentro de uma sessão de tela (Linux)

5

Eu tenho várias sessões de tela, cada uma delas está executando um aplicativo java.

Por exemplo, tenho estas três sessões de tela:

    7361.ARM48      (Detached)
    7397.ROP90      (Detached)
    7314.ARM22      (Detached)

E esta é a saída de ps -A

7314 ?        00:00:00 screen
7329 pts/1    00:00:16 java
7361 ?        00:00:00 screen
7375 pts/2    00:00:02 java
7397 ?        00:00:00 screen
7411 pts/3    00:00:02 java

Existe alguma maneira de detectar com segurança se cada sessão de tela está executando o aplicativo java ou não?

Examinei o manual do Linux na tela, mas não encontrei nenhum comando de tela que mostrasse os processos filhos de uma sessão de tela ( link )

    
por Albert 14.04.2013 / 11:41

2 respostas

3

Isso soa como um caso para

ps fx

e também funciona para várias janelas dentro de uma sessão de tela

    
por 20.04.2015 / 22:36
2

Existem várias opções, a saída de ps aux pode ser classificada no nome do terminal e do pid. Isso lhe dará uma lista de cada processo filho de cada tela, mas não associará claramente (pts / N) a cada tela com os processos dentro dela:

por exemplo,

$ ps aux | sort -k7.2r  | 
                grep -Ei 'pts|java|screen' | 
                awk '{ printf "%10s %6s %6s %6s %s\n", $1, $2, $7, $9, $11}'
  jaroslav  30700   tty3  Apr07 screen
      root   4933      ?  Mar16 SCREEN
  jaroslav   5024      ?  Mar12 SCREEN
      root   3811      ?  Apr07 sshd:
  jaroslav   3716      ?  Apr07 SCREEN
  jaroslav  11996      ?  Apr05 SCREEN
  jaroslav  11139      ?  Apr05 sshd:
      root   4934  pts/8  Mar16 -/bin/bash
      root   3819  pts/6  Apr07 -bash
  jaroslav   3718  pts/5  Apr07 -/bin/bash
  jaroslav   3810  pts/5  Apr07 ssh
  jaroslav  11998  pts/2  Apr05 -/bin/bash
  jaroslav  11140  pts/1  Apr05 -bash
  jaroslav  12594  pts/1  13:52 sort
  jaroslav  12595  pts/1  13:52 grep
  jaroslav  12596  pts/1  13:52 awk
  jaroslav  12593  pts/1  13:52 ps
  jaroslav   5041  pts/0  Mar12 /bin/bash
  jaroslav   5076  pts/0  Mar12 /usr/lib/jvm//sun-jdk-1.6/bin/

Como alternativa, você pode executar pstree em todas as telas para listar seus filhos. Isso é provavelmente o que você está procurando.

$ echo $(pidof  screen;pidof  SCREEN)| tr ' ' \n  |
       xargs -L1 pstree -lanu

creen,jaroslav -dR serv
screen,jaroslav -dR java3
  '-bash
      '-java -cp /home/jaroslav/src/java/ TestUlimit
          '-11*[{java}]
screen,jaroslav -dR java2
  '-bash
      '-java -cp /home/jaroslav/src/java/ TestUlimit
          '-11*[{java}]
screen,jaroslav -dR java1
  '-bash
      '-java -cp /home/jaroslav/src/java/ TestUlimit
          '-11*[{java}]
screen,jaroslav -dR serv
  '-bash
screen,jaroslav -dmS nailgun /home/jaroslav/bin/nailgun
  '-nailgun /home/jaroslav/bin/nailgun
      '-java -server -jar /usr/share/nailgun/lib/nailgun.jar localhost:64781
          '-16*[{java}]
screen -dR emr
  '-bash
screen,jaroslav -dR gdb
  '-bash
      '-ssh l00

Ou encontre os pais de cada processo java.

$ for i in 'pidof  java'; do pstree -sp $i ;done | grep -v '^ '
init(1)---screen(13097)---bash(13099)---java(13943)-+-{java}(13947)
init(1)---screen(13004)---bash(13006)---java(13927)-+-{java}(13931)
init(1)---screen(12911)---bash(12913)---java(13911)-+-{java}(13915)
init(1)---screen(5024)---nailgun(5041)---java(5076)-+-{java}(5095)
    
por 14.04.2013 / 14:21