터미널에서 여전히 실행중인 프로세스를 찾는 방법은 무엇입니까?


13

그놈 터미널에서 탭을 닫으려고하면 다음과 같이 표시됩니다.

이 터미널을 닫으시겠습니까? 이 터미널에서 여전히 실행중인 프로세스가 있습니다. 터미널을 닫으면 터미널이 종료됩니다.

아직 실행중인 항목을 어떻게 알 수 있습니까? 의 출력에는 아무것도 없습니다 jobs. 감사.


1
이 메시지가 표시되는 동안 쉘 프롬프트에 있다면 아마도 이것은 터미널 에뮬레이터가 직접 시작한 쉘이 아닌 중첩 된 쉘일 것입니다. 어쩌면 당신은 시작했습니다 screen, tmux, script, ssh, mc등을 입력하여 오프 패널을 설정하거나, 또 다른 쉘 bash, 또는 이러한 라인을 따라 뭔가를. Ctrl + D를 누르거나 타자 exit를 치면 쉘이 종료됩니다.
egmont

감사. 이후 exit에는 그놈 터미널 탭이 닫히지 않습니다.
Tim

1
잠시 exit후 아마 닫을 것입니다. @egmont 당신은 이것을 답변으로 옮길 수 있습니까?
Videonauth

답변:


13
ps T

터미널과 관련된 모든 프로세스를 선택합니다.


약간의 속임수 일지라도 좋습니다. nohup명령을 통해 생성 된 프로세스는 터미널에서 연결이 해제되므로 닫기를 막지 마십시오. 그러나 여전히이 명령으로 나열됩니다.
Sergiy Kolodyazhnyy

아니면 그 문제에 대한 ps
user10089632

2

쉘의 PID를 부모로 나열하는 프로세스에서 정점에 도달 할 수 있습니다. 당신이 알거나 모르는 것처럼, 우리는 ps형식을 지정할 수 있습니다

SHELLPID=$$ ; ps -e  -o cmd,pid,ppid | awk -v shell=$SHELLPID  '$NF~shell'   

여기, 우리는 특별한 변수에서 쉘의 PID를 얻을 $$SHELLPID다음 파이프의 서브 쉘에서 AWK 사용할 수 있습니다. 기본적으로 우리는 NAME, PID, Parent PID 형식으로 프로세스를 나열하고 마지막 열에 적절한 PID를 가진 프로세스 만 필터링합니다.


2

터미널에서 프로세스 (예 : gedit)를 시작한 경우이 두 프로세스에 대한 프로세스 ID (PID) (bash) 및 부모 프로세스 ID (PPID) (gedit)가 동일합니다. 이것은의 출력에서 ​​볼 수 있습니다

ps -ef

명령. 가독성을 높이려면 먼저 출력을 "파이프"하여 grep현재 실행중인 모든 "bash"프로세스의 PID를 찾은 다음 다시 "파이프"하는 것이 awk좋습니다. 이 옵션 awk은 PID 및 프로세스 이름 필드 (필드 2 및 8) 만 선택하여 화면에 출력합니다.

ps -ef | grep bash | awk '{print $2 ": " $8}'

출력의 숫자는 PID입니다. 이를 사용하여 해당 PID가있는 터미널에서 시작된 프로세스를 찾습니다. 하나 이상의 터미널을 연 경우 둘 이상의 출력 라인이있을 수 있습니다. 이제 해당 터미널 세션의 "자식"프로세스 (있는 경우)를 찾으려면 다음 명령을 사용할 수 있습니다.

ps -ef | awk '{if ($3 == EnterPID) print $2 ": " $8;}'

마지막 명령에서 EnterPID 대신 PID 번호를 입력해야합니다. "bash"에 대해 둘 이상의 PID가있는 경우 모두 시도해야합니다.

마지막 명령은 출력을보고 ps -efPID (이전 명령에서 찾은)와 PPID가 프로세스에 대해 동일한 지 검색합니다.

더 많은 정보:

남자 ps

남자 awk


-1

사용할 수 있습니다 htop. Ubuntu 16.04 이상에서는을 입력하기 만하면 설치할 수 있습니다 sudo apt-get install htop.

을 사용할 수도 있습니다 top.


htop?를 사용하여 현재 터미널의 프로세스를 어떻게 식별 합니까?
muru
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.