특정 화면에서 실행 중인 프로세스의 모든 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: 해당 파일이나 디렉터리가 없습니다.
고쳐 쓰다:
다음 명령 순서는 예상된 결과를 생성합니다.
모든 화면 프로세스 가져오기
ps waux | grep -i screen | grep -v grep | awk '{print $2}' | paste -s -d,
스크린 세션에서 실행 중인 모든 프로세스 가져오기
pgrep -P $(ps waux | grep -i screen | grep -v grep | awk '{print $2}' | paste -s -d,) | paste -s -d,
스크린 세션에서 실행 중인 프로세스에서 실행 중인 모든 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
지침:
java
나는 스크린 세션 내에서 실행되는 프로세스 에만 관심이 있습니다 .- 나는 이 명령을 사용하여 쉼표로 구분된 프로세스 식별자 목록을 얻은 다음
paste
명령 옵션에 대한 인수로 사용합니다.-P
pgrep
업데이트 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