Isso soa como um caso para
ps fx
e também funciona para várias janelas dentro de uma sessão de tela
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 )
Isso soa como um caso para
ps fx
e também funciona para várias janelas dentro de uma sessão de tela
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)
Tags java gnu-screen linux