프로세스의 PID 번호를 알면 이름을 어떻게 알 수 있습니까?


263

프로세스 (UNIX 시스템)의 PID 번호가있는 경우 연관된 프로세스의 이름을 어떻게 찾을 수 있습니까?

어떻게해야합니까?


9
당신은 사용할 수 있습니다 ps또는ls -l /proc/$PID/exe
Eddy_Em

1
@Eddy_Em은 프로세스 이름이 아닌 실행 파일을 제공합니다. 또한, 그것은 휴대용이 아닙니다 ...
derobert

9
ps -fp PID전체 명령을 표시합니다
Temak

답변:


284

모든 POSIX 호환 시스템 및 Linux에서 다음을 사용할 수 있습니다 ps.

ps -p 1337 -o comm=

여기서 프로세스는로 PID에 의해 선택됩니다 -p. 이 -o옵션 comm은 명령 형식을 의미하는 출력 형식을 지정합니다 .

참조 : ps- 오픈 그룹 기본 사양 문제를 6


28
comm은 명령을 15 자로 자릅니다. command대신 사용하면 문제 가 해결됩니다.
니모

1
[우분투 14.04.4 LTS] $ ps -p 1 -o comm= init $ ps -p 1 -o command= / sbin / init; 이것은 약 15자가 아니라 바이너리 이름과 전체 경로 일 수 있음을 의미합니다.
OmarOthman

3
실제로, comm이진의 이름을 제공하고 command인수 0을 반환
합니다.

45

프로세스 이름 또는 process-id 또는 pid가 사용하는 명령을 찾을 수 있습니다.

/proc/pid/cmdline

함으로써

cat /proc/pid/cmdline

여기서 pid는
예를 들어 Formaple 이라는 이름을 찾으려는 pid입니다 .

 # ps aux

   ................
   ................
   user  2480  0.0  1.2 119100 12728 pts/0  Sl   22:42   0:01 gnome-terminal
   ................
   ................

pid 2480에서 사용하는 프로세스 이름을 찾으려면

# cat /proc/2480/cmdline 

 gnome-terminal

14
주의 : OP는 UNIX를 언급합니다. 모든 UNIX가 계획 9와 같은 프로세스 특정 파일을 구현하는 것은 아닙니다. 귀하의 답변은 일반적으로 Linux에만 적용됩니다.
slhck

3
사실이지만 그들은 "linux"라는 질문에 태그를 달았습니다. Linux 기반이 아닌 UNIX OS를 사용하는 사람은 자신의 요구에 맞게 답변을 수정해야 할 것입니다.
Andrew White

14

특정 pid를 사용하여 프로그램의 경로를 얻으려면 다음을 사용할 수 있습니다.

ps ax|egrep "^ [PID]"

또는 다음을 사용할 수 있습니다.

ps -a [PID]

여기에 이미지 설명을 입력하십시오


1
ps -a터미널과 관련된 모든 프로세스를 나열합니다. 입력을받지 않습니다.
Michael Lee

@MichaelLee 나는 그것이 ps버전에 의존한다고 생각합니다 procps version 3.2.7.
Pedro Lobito

8
# ls -la /proc/ID_GOES_HERE/exe

예:

# ls -la /proc/1374/exe
lrwxrwxrwx 1 chmm chmm 0 Mai  5 20:46 /proc/1374/exe -> /usr/bin/telegram-desktop

이것은 완벽하다.
jayarjo

1
아마 더 나은 : readlink /proc/1337/exe. readlink-해결 된 심볼릭 링크 또는 표준 파일 이름을 인쇄합니다.
Pablo A

8

pmap을 사용할 수 있습니다. PID 6649를 검색 중이며 추가 프로세스 세부 정보를 차단했습니다.

$ pmap 6649 | head -1
6649:   /usr/lib64/firefox/firefox

이 명령은 내가 필요로하는 것보다 더 많은 도움이되었습니다. Java 프로세스가 주어지면 ps명령 만 표시 java하면되지만 전달 된 나머지 매개 변수는로 완전히 표시됩니다 pmap.
Daniel Andrei Mincă

3

ps와 함께 awk를 사용할 수도 있습니다

ps aux | awk '$2 == PID number for a process  { print $0 }'

예:

root@cprogrammer:~# ps aux | awk '$2 == 1 { print $0 }'
root         1  0.0  0.2  24476  2436 ?        Ss   15:38   0:01 /sbin/init    

HEAD LINE을 인쇄하려면

 ps --headers aux |head -n 1 && ps aux | awk '$2 == 1 { print $0 }'

                 (or) 

 ps --headers aux |head -n 1; ps aux | awk '$2 == 1 { print $0 }'


root@cprogrammer:~# ps --headers aux |head -n 1 && ps aux | awk '$2 == 1 { print $0 }'
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.2  24476  2436 ?        Ss   15:38   0:01 /sbin/init

2
명령의 어느 곳에 나 숫자를 포함시키는 프로세스를 선택하기 때문에 불안정합니다. 시도 ps ax | grep 1하고 정말 반환 여부를 확인 init, 예를 들어, 프로세스를. (제 경우에는 119 줄을 반환합니다. 바람직하지 않습니다.)
slhck

1
@slhck 답변을 수정했습니다 ... 정보 주셔서 감사합니다. ps -p 1 -o comm = 이 질문에 대한 최상의 옵션입니다.
Gangadhar

헤더를 유지하기 위해 두 번의 실행이 필요하지 않습니다. 대신 기본값을 사용하므로 ps aux | awk 'NR==1 || $2==PID'말할 필요가 없습니다 {print $0}. 그러나 당신이 언급 한대로 -p어쨌든 더 좋습니다.
dave_thompson_085

3

Simmilar to slhck 's Answer , 그러나 명령 호출 대신 파일 작업에 의존합니다.

MYPID=1
cat "/proc/$MYPID/comm"

[우분투 14.04.4 LTS] cat /proc/1/comm=> / sbin / init가 아닌 init. 그의 대답에는 더 긴 버전이 포함되어 있습니다. 그러나 어쨌든 +1.
OmarOthman

2

놀랍게도 ps에 대한 -f (전체 명령) 옵션을 언급 한 사람은 없습니다. 나는 그것을 -e (모든 것)와 함께 사용하고 결과를 grep으로 파이프하여 검색 범위를 좁힐 수 있습니다.

ps -ef | grep <PID>

또한 시스템에서 많은 리소스를 사용하는 누군가가 실행중인 전체 명령을 보는 데 매우 유용합니다. 명령에 전달 된 옵션과 인수가 표시됩니다.


3
BSD에서는 작동하지 않습니다 (MacOSX를 포함 할 수 있습니까? 잘 모르겠습니다). 곳에서도 -e -f사용할 수 있으며, grep예를 들어, 많은 거짓 일치를 생성 할 수 있습니다 grep 33포함 PID = 933 또는 339, PPID = 33 초 33 분, programName을 또는 인수가 (33)를 포함하는의 timeused 33 또는 933 또는 339 -을 포함하여 grep자체. 모든 (AFAIK)을 ps해야합니까 -p, 그래서 그냥, ps -fp 33.
dave_thompson_085

0

다음 명령을 사용하는 가장 쉬운 방법을 찾으십시오.

ps -awxs | grep pid

에 비해 매우 비효율적 일뿐만 아니라 ps -p${pid},이를 포함하여 많은 오 탐지가 발생 grep합니다.
Toby Speight

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