주문하다:

주문하다:

특정 화면에서 실행 중인 프로세스의 모든 PID를 나열하는 명령을 어떻게 실행할 수 있습니까? (여러 탭이 열려 있으므로 여러 bash 프로세스가 실행되고 있다고 가정) 다음 게시물을 찾았습니다.스크린 세션에서 어떤 명령이 실행되고 있는지 알아보세요.

이 명령은 화면에 프로세스가 하나만 실행될 때 작동하지만 화면 세션에 여러 탭이 열려 있으면 실패합니다. 내가 얻는 오류는 다음과 같습니다.

주문하다:

ps u -p $(ps -el | grep $(ps -el | grep 28572 | grep bash | awk '{print $4}') | grep -v bash | awk '{print $4}')

산출:

grep: 28573: 해당 파일이나 디렉터리가 없습니다.

고쳐 쓰다:

다음 명령 순서는 예상된 결과를 생성합니다.

  1. 모든 화면 프로세스 가져오기

    ps waux | grep -i screen | grep -v grep | awk '{print $2}' | paste -s -d,
    
  2. 스크린 세션에서 실행 중인 모든 프로세스 가져오기

    pgrep -P $(ps waux | grep -i screen | grep -v grep | awk '{print $2}' | paste -s -d,) | paste -s -d,
    
  3. 스크린 세션에서 실행 중인 프로세스에서 실행 중인 모든 Java 프로세스 가져오기

    ps -w -p $(pgrep -P $(pgrep -P $(ps waux | grep -i screen | grep -v grep | awk '{print $2}' | paste -s -d,) | paste -s -d,) | paste -s -d,) | grep java
    

지침:

  1. java나는 스크린 세션 내에서 실행되는 프로세스 에만 관심이 있습니다 .
  2. 나는 이 명령을 사용하여 쉼표로 구분된 프로세스 식별자 목록을 얻은 다음 paste명령 옵션에 대한 인수로 사용합니다.-Ppgrep

업데이트 2:

paste이 명령을 사용하지 않는 방법을 찾았습니다 xargs.

ps waux | grep -i screen | grep -v grep | awk '{print $2}' | xargs -I{} pgrep -P {} | xargs -I{} pgrep -P {} | xargs -I{} ps -w -p {} |  grep java

답변1

그러나 이 방법은 스크린 세션이 열려 있는 경우에만 작동합니다.

ps waux | grep screen$ | awk '{print $2}' | xargs pstree

예를 들어

jeff@linux:~$ ps waux | grep screen$ | awk '{print $2}' | xargs pstree
screen───screen─┬─bash───top
                ├─bash───watch
                └─bash───xargs───pstree

여러 개의 스크린 세션이 있는 경우 다음과 같이 반복할 수 있습니다.

jeff@jlinux:~$ for pid in $(ps waux | grep screen$ | awk '{print $2}'); do pstree $pid; done
screen───screen───bash
screen───screen─┬─bash───top
                ├─bash───watch
                └─bash───pstree

관련 정보