실행중인 프로세스의 절대 경로를 어떻게 알 수 있습니까?


93

디스크에 동일한 응용 프로그램의 사본이 여러 개 있고 하나만 실행중인 경우와 같이 볼 수 있듯이 다른 응용 프로그램과 구별 ps할 수있는 절대 경로를 어떻게 알 수 있습니까?

답변:


110
% sudo ls -l /proc/PID/exe

예 :

% ps -auxwe | 그렙 24466
루트 24466 0.0 0.0 1476280? S 2009 0:00 감독 sshd
% sudo ls -l / proc / 24466 / exe
lrwxrwxrwx 1 루트 루트 0 2 월 1 일 18:05 / proc / 24466 / exe-> /package/admin/daemontools-0.76/command/supervise

1
내 시스템 (ubuntu 14.04)에서는 ls명령 을 실행하기 위해 수퍼 유저 일 필요가 없습니다 .
jarno

3
@jarno- 명령을 ls: cannot read symbolic link /proc/28783/exe: Permission denied실행하는 것이 아니라 자신이 아닌 ls프로세스의 프로세스 정보에 액세스하는 것입니다. 필자의 경우 / proc에 나열된 모든 프로세스의 약 97 %가 루트 프로세스이고 다른 프로세스는 11 명의 다른 사용자에게 배포됩니다.
Irfy

20

사용하다:

pwdx $pid

이것은 절대 경로가 아닌 pid의 현재 작업 디렉토리를 제공합니다.

일반적으로 which명령은 쉘에서 호출되는 것을 알려줍니다.

#> which vlc
/usr/bin/vlc

3
이 답변에 더 많은
투표

8
@ Kokizzu 아니요, 질문에 전혀 대답하지 않기 때문이 아닙니다. which 명령은 지금 명령을 실행하면 어떤 바이너리가 실행될지를 알려줍니다. 문제는 "이진 파일이 이미 실행 중"이었습니다. 예를 들어 컴퓨터에 수십 개의 jdk가 있다고 상상해보십시오. jdk가 가져온 java 프로세스를 알고 싶다면 도움이되지 않습니다. 지금 실행하면 어떤 jdk를 가져올 지 알려줍니다. 수락 된 답변도 정답입니다.
noamik

내 대답은 다른 JDK 버전과 일부 32 비트 / 64 비트로 프로세스를 실행합니다. 프로세스에 대한 올바른 jstack / jmap 버전을 확인하려면 위의 답변이 작동하지 않지만 수락 된 답변은 작동합니다.
Daniel Da Cunha

@Kokizzu 이것은 "프로세스의 현재 작업 디렉토리는 무엇입니까 $pid?"라는 질문에만 답합니다. 수정 된 게시물은 여전히 ​​질문에 대답하지 않습니다. which단지 "명령이 경로에 있다면 무엇입니까?"
John Strood

pwdxredhat x64 6.3의 pid에 따라 프로세스의 실행 가능한 프로그램의 절대 경로를 반환하십시오.
Nick Dong

14

한 가지 방법은 ps -ef입니다


5
특정 서비스를 위해 작동하지 않았다면, 그것은 단지 상대 경로를 제공합니다
Jader Dias

프로세스가 시작된 명령을 통해 프로세스를 식별하는 데 도움이되었습니다.
jpierson


2

빠른 대답은 ps옵션이나 /proc파일 시스템 정보 와 함께 사용 하는 것 입니다. 즉 것입니다 일반적으로 작동하지만 보장 할 수 없습니다. 일반적으로 확실하고 확실한 답변은 없습니다. 예를 들어, 실행 파일이 실행 중에 삭제되어 파일 경로가 없으면 어떻게해야합니까?

좀 더 자세한 내용, 특히 4.3 및 4.4 질문에 대해서는 Unix FAQ 를 참조하십시오 .


2

왜 모두가 PID를 알고 싶어합니까? 인간 친화적 인 방법은 다음과 같습니다.

pwdx `pgrep ###process_name###`

"내가 볼 수 있듯이"이라는 질문 ps에 PID가 표시 될 것입니다.
Scz

아 알았어 나는 여전히 많은 유스 케이스에서 이것이 더 빠른 라이너라고 생각합니다.
moodboom

1

lsof는 옵션입니다. 다음과 같은 것을 시도해 볼 수 있습니다.

lsof -p PROCESS_ID

실행 파일의 실제 위치를 포함하여 프로세스에서 연 모든 파일이 나열됩니다. 그런 다음 원하는 정보를 찾기 위해 awk, cut, grep 등을 더 추가 할 수 있습니다.

예를 들어, 'java'프로세스의 출처를 식별하기 위해 다음 명령을 실행했습니다.

lsof -p 12345 | awk '{print $ NF}'| grep 'java $'


이것은 이미 게시 된 답변과 정확히 어떻게 다릅니 까?
Pimp Juice IT

0

당신은 사용할 수 있습니다

readlink /proc/$(pgrep -x -U $(id -ur) APP_NAME)/exe

또는

find /proc/$(pgrep -x -U $(id -ur) APP_NAME)/exe -printf "%l\n"

절대 경로를 얻을 수 있습니다. PID는 프로세스입니다.

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