답변:
프로세스의 바이너리 위치를 얻기의 한 가지 방법은 사용하는 것입니다 lsof
그리고 grep
처음에 대한 txt
부분. 예를 들어, 쉘에서 쉘이 어떤 바이너리인지 확인하려면 쉘 대신 PID를 사용하십시오 $$
.
$ lsof -p $$ | grep txt
bash 78228 blair txt REG 14,2 1244928 6568359 /bin/bash
bash 78228 blair txt REG 14,2 1059792 23699809 /usr/lib/dyld
bash 78228 blair txt REG 14,2 136368128 81751398 /private/var/db/dyld/dyld_shared_cache_i386
쉘이 사용하고 있음을 알 수 있습니다 /bin/bash
.
이 기술은 프로세스가 절대 또는 상대 경로를 사용하여 시작된 경우 작동합니다. 예를 들어, 하나의 쉘로 이동하여 실행
$ sleep 1234567
ps
다른 쉘에서 사용 하는 방법은 어떻게 시작되었는지 보여줍니다.
$ ps auxww|grep '[s]leep'
blair 79462 0.0 0.0 600908 744 s011 S+ 11:17PM 0:00.00 sleep 1234567
사용하여 lsof
실행 한 바이너리 를 보여줍니다.
$ lsof -p 79462 | awk '$4 == "txt" { print $9 }'
/opt/local-development/bin/gsleep
내가 주워 설명 설치 MacPorts의의로 coreutils + with_default_names,이 gsleep
하지를 /bin/sleep
.
예 : 연결 프로세스 명령 이름 뒤에 있습니다 PID 45109
...
> % ps awx | awk '$1 == 45109 { print $5 }'
> /Applications/Safari.app/Contents/MacOS/Safari
grep이있는 ps -ef가 나를 위해 작동합니다. 특정 파일 이름의 경우 grep을 통해 간단히 파이프하십시오.
MacBook:~ Me$ ps -ef | grep Safari | grep -v grep
501 15733 301 0 0:25.76 ?? 1:58.24 /Applications/Safari.app/Contents/MacOS/Safari -psn_0_4977855
(최종 'grep -v grep'은 단순히 출력에서 자신의 grep 명령을 얻는 것을 중지시킵니다)
; exit
첫 번째txt
항목 만 인쇄되도록 print 문 뒤에 추가했습니다 .