현재 실행 중인 프로세스에 대한 실행 파일이 *어디* 있는지 찾아보세요.

현재 실행 중인 프로세스에 대한 실행 파일이 *어디* 있는지 찾아보세요.

/path/to/gcc/myapp.exe2개의 실행 파일( , 및 ) 이 있고 /path/to/intel/myapp.exe하나는 인텔 컴파일러로 컴파일되고 다른 하나는 표준 gcc로 컴파일된 경우 둘 다 실행 top하면 myapp. 두 가지를 모두 실행하고 프로세스가 로 실행되는 경우 myapp어떤 프로세스가 어떤 실행 파일에서 나오는지 알아낼 수 있는 방법이 있습니까?

우리 클러스터에는 많은 앱이 설치되어 있으며 어떤 앱이 가장 많이 사용되는지 뿐만 아니라 어떤 앱이 사용되는지에도 관심이 있습니다.버전중 앱이 사용되고 있습니다. 500번의 실행이 발생하는 경우 그 중 100개가 에서 왔고 나머지 400개가 에서 왔는지 R알고 싶습니다 . 어떻게 해야 합니까?/path/to/R-3.2.1/intel/R/path/to/R-3.1.3/gcc/R

답변1

/proc다음에 언급된 대로 파일 시스템을 사용하여 이 작업을 수행할 수 있습니다.proc(5)매뉴얼 페이지:

/proc/[pid]/exe

Linux 2.2 이상에서 이 파일은 실행된 명령의 실제 경로 이름을 포함하는 심볼릭 링크입니다.

왜냐하면 그것은심볼릭 링크, 당신은 읽을 수 있습니다표적( ls -l경로 이름을 보려면 다음을 수행하십시오).

물론 이는 [pid]런타임 시 관심 있는 특정 실행 파일에 대한 프로세스 ID를 의미합니다.

(오래된 Linux 커널을 실행하는 시스템이 있을 가능성은 거의 없으므로 "항상 작동"하는 것으로 충분합니다.)

개수를 얻으려면 /proc소유한 각 디렉토리에 대해(프로그램을 실행하고 있으므로 해당 데이터를 볼 수 있음 /proc) 경로 이름을 관심 있는 디렉토리와 일치시키는 스크립트가 필요합니다. 그만큼readlink예를 들어 프로그램은 bash 스크립트에 유용합니다(그리고 의 일부이므로 coreutilsLinux 시스템에 있을 가능성이 높습니다).

답변2

그렇게 하려면 을 시작한 top다음 c키보드를 눌러 전체 경로 보기를 전환할 수 있습니다.

답변3

이러한 프로세스가 다른 명령줄(예: 전체 경로 사용)로 실행되는 경우 를 눌러 c프로세스가 실행된 전체 명령줄을 표시하거나 숨길 수 있습니다.

관련 정보