5

У меня есть несколько сеансов экрана, каждый из которых запускает одно приложение Java.

Например, у меня есть эти 3 сеанса экрана:

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

И это вывод 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

Есть ли способ надежно определить, работает ли каждый сеанс экрана со своим Java-приложением или нет?

Я просмотрел экранное руководство по Linux, но не смог найти никаких экранных команд, которые бы отображали дочерние процессы экранной сессии (http://linux.die.net/man/1/screen)

2 ответа2

3

Это звучит как случай для

ps fx

и это также работает для нескольких окон в течение одного сеанса экрана

2

Есть несколько вариантов, вывод ps aux можно отсортировать по названию терминала и pid. Это даст вам список всех дочерних процессов каждого экрана, но не будет четко связывать (pts/N) каждый экран с процессами внутри него:

например

$ 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/

Кроме того, вы можете запустить pstree на каждом экране, чтобы перечислить их детей. Это, наверное, то, что вы ищете.

$ 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

Или найдите родителей каждого процесса 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)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .