실행중인 터미널 프로그램의 프로세스 ID (PID)를 찾는 방법은 무엇입니까?


답변:


128

다른 터미널을 열고 ps ax | grep foo여기서 foo는 응답하지 않는 프로그램의 이름입니다. 이것은 다음과 같은 출력 라인을 반환해야합니다.

$ ps ax | grep firefox
2222 ?        S      0:00 /bin/sh /usr/lib/firefox-3.6.9/firefox
2231 ?        Sl   514:36 /usr/lib/firefox-3.6.9/firefox-bin
30290 pts/2    S+     0:00 grep --color=auto firefox

각 출력 행의 첫 번째 필드는 일치하는 프로그램의 프로세스 ID를 나타내는 숫자입니다 grep(마지막 필드는 무시해도 grep됩니다).

문제가있는 프로세스를 중지하려면 다음을 수행하십시오. kill pid여기서 pid는 프로그램의 프로세스 ID입니다. 어떤 경기를해야하는지 판단해야 할 수도 있고 대신 kill사용할 수도 있습니다 top. kill자체적으로 사용하면 SIGTERM이 전송됩니다. SIGTERM은 프로그램 자체가 올바르게 정리되도록하기 위해 먼저 시도해야합니다. SIGTERM이 실패하면, 스톤 거 약인 SIGHUP을 시도하십시오 : kill -HUP pid. 다른 모든 방법이 실패하면 SIGKILL을 보내십시오. 그러나 SIGKILL로 인해 커널이 정리 가능성없이 즉시 프로세스를 종료하게되므로 최후의 수단으로 만 사용해야합니다. 때때로 데이터가 손상되거나 다른 문제가 발생할 수 있습니다. 다시 한번, SIGKILL을 최후의 수단으로 보내십시오. 그렇게하려면 kill -KILL pid또는 을 수행하십시오 kill -9 pid.

물론 그래픽 인터페이스를 실행하는 경우 작업을 수행하기 위해이 미친 명령 줄을 속일 필요가 없습니다. "시스템 모니터"를 열고 프로세스 탭으로 이동 한 후 중지하려는 프로세스 (Hm, 90 % CPU를 사용하는 프로세스 일 수 있음)를 선택하고 마우스 오른쪽 단추를 클릭하십시오. 프로세스가 이미 중지되었으므로 (문제입니까?) 결과 메뉴에서 프로세스 종료 또는 프로세스 종료를 선택하십시오.

koanhead에 신용


5
다른 모든 방법이 실패하지 않으면 SIGKILL (kill -9)을 사용해서는 안됩니다. 리스팅 만 kill -9나쁜 조언입니다. 답을 수정하여 수정했습니다.
Scott Severance

사용자 정의 함수의 PID를 어떻게 찾을 수 있습니까? ping명령과 루프가 포함 된 함수가 있습니다 sleep. unix.stackexchange.com/a/275826/72988 에 따르면 , 우분투에서는이 기능을 사용할 수 없습니다 multiplexer.
Timo

49

pgrep, pkill, pidof 등으로 동일한 명령을 수행 할 수있을 때 긴 명령이 필요하다고 생각하지 않습니다.

  • 실행중인 프로그램의 pid를 얻으려면

pgrep :

   pgrep [options] pattern

DESCRIPTION : pgrep은 현재 실행중인 프로세스를 살펴보고 선택 기준과 stdout에 일치하는 프로세스 ID를 나열합니다. 모든 기준이 일치해야합니다. 예를 들어

  • root가 소유 한 sshd라는 프로세스를 찾습니다.

    $ pgrep -u root sshd
    
  • 루트 OR 데몬이 소유 한 프로세스를 나열하십시오.

    $ pgrep -u root,daemon
    

pidof :

설명 :

Pidof는 명명 된 프로그램의 프로세스 ID (pid)를 찾습니다. 표준 출력에 해당 ID를 인쇄합니다.

구문 : pidof program_name

  • pid를 사용하여 프로그램을 종료하려면 pkill 예제를 사용하십시오.

    pkill pid    
    pkill -f process_name    
    pkill -o process_name    
    pkill -n process_name    
    pkill -l process_name
    

    -f플래그 : process_name을 검색합니다 (man pkill 참조).
    -o플래그 : 가장 오래된 일치 프로세스 만 선택하십시오.
    -n플래그 : 최신 일치 프로세스 만 선택하십시오.
    -l플래그 : 프로세스 이름과 프로세스 ID를 나열합니다.


1
이것이 가장 좋은 답변입니다
BlackDivine

21

실행중인 프로그램의 pid를 아는 가장 쉬운 방법은 다음을 사용하는 것입니다.

pidof <application name>

예를 들어, vim을 시작하고 pid를 알고 싶다면 다음을 수행하십시오.

pidof vim

시작된 정확한 프로그램 이름을 제공해야합니다.

예를 들어 vi를 실행하고 실행 pidof vim하면 올바른 결과를 얻지 못합니다.

자세한 내용은 pidof의 설명서 페이지를 참조하십시오.


기본적으로 설치되어 있지 않습니다. sysvinit-utils 패키지에있을 수 있습니다.
flickerfly

MariaDB를 받았습니다. pidof mysqldPID를 반환합니다. 그러나 입력하면 pidof Mariadb아무것도 반환되지 않습니다. MariaDB와 MySQL 모두 동일한 PID입니까?
Pathros

18

더 자세한 출력을 얻으려면 "-i"를 추가하고 "ax"대신 "aux"를 사용하여 대소 문자를 구분하지 않는 검색을 사용하는 것이 좋습니다.

ps aux | grep -i firefox

모든 프로세스를 종료하려면 다음을 사용할 수 있습니다.

ps aux | grep -i firefox | awk {'print $2'} | xargs kill -9

그것은 강력한 살인입니다. 소프트 킬을 원하면 "-9"를 떨어 뜨린다.


5
명령에 ps aux | grep -i firefox...텍스트가 포함되어 있기 때문에 프로세스 도 종료됩니다 firefox!
Eric

1
@Eric 당신은 grep -i firefo[x]파이어 폭스와 일치 하는 데 사용할 수 있습니다
AD

@ john-foley -9와 함께 사용 하는 것은 결코 권장하지 않습니다. 설명 kill여기 를 참조 하십시오.
AD

3

pid 만 원한다면 (자동 킬 스크립트 등에 유용합니다.)

pgrep -f desired_program_name

1

우분투 16.04 LTS를 실행하는 사람들을 위해, 당신은 해야 사용할 ps ax뿐 아니라ps , 그렇지 않으면 당신은 당신이에있어 특정 단말기 인스턴스에서 산란 프로세스를 얻을 것이다, 명령 줄에서. (대개 '배쉬'[당신이있어 쉘을 ] 및 'ps'[방금 실행 한 내용])


나는 ps -e(모두 표시) 및 ps -ejH(프로세스 트리 표시 )를 좋아 합니다.
앤드류

1
@Andrew nice, 실제로 꽤 달콤합니다. 팁을 주셔서 감사합니다
cygnus_x1

0

다른 터미널을 열거 나 다른 tty로 전환하여 top기본적으로 시스템 모니터의 텍스트 버전 인을 실행할 수도 있습니다. 첫 번째 열에는 실행중인 각 프로세스의 PID가 나열되어 있습니다.을 누르고 KPID를 입력 한 다음 전송할 숫자 신호를 입력하여 종료 할 수 있습니다.


0

당신은 할 수 있습니다 :

ps ax | grep firefox | cut -f2 -d" " - | xargs kill -9

처음 두 파이프는 프로세스 정보를 얻습니다. 다음으로 구식 컷을 사용하여 PID 열을 가져온 다음 결과 PID를 죽입니다.


kill -9프로세스를 죽여야하는 가장 큰 총입니다. 프로세스에 리소스를 정리할 수있는 기회를 제공하기 위해 SIGKILL에 의지하기 전에 먼저 더 부드러운 신호를 시도해야합니다.
바이트 사령관

사실 @ByteCommander입니다. 나는 그것을 일을 끝내는 하나의 라이너로 만들고 싶었다.
Arian Soltani

0
top

또는

screen -list|ls

해당 프로세스와 함께 모든 pid를 나열하십시오.

kill -[pid]
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.