2010-04-02 3 views
5

Mac OS X에서 특정 프로세스가 실행 중일 때 인수를 기준으로 식별하려고합니다. 동일한 이름으로 실행되는 프로세스가 여러 개있을 수 있지만 찾고있는 인수가 하나만 있습니다. 프로세스는 내 코드를 실행할 동일한 사용자가 소유하지 않습니다. 그들은 어떤 식 으로든 argv를 수정하지 않을 것입니다.ps는 Mac OS X의 모든 프로세스에 대해 argv를 어떻게 표시합니까?

'ps'명령은 내가 필요한 정보를 정확히 보여줍니다. 그러나 나는 'ps'를 생성하고 그 출력을 파싱하지 않는 것을 선호합니다.

원래 sysctl을 사용하여 this question에서 해결책을 시도했지만 자신이 소유 한 프로세스에서만 작동한다는 것을 알았습니다. 자세한 내용은 my other question을 참조하십시오.

ps는 다른 사용자가 소유 한 프로세스에 대해 argv 정보를 어떻게 얻습니까?

답변

5

Mac OS X의 경우 ps는 setuid 0이며 모든 프로세스에 대한 정보를 얻는 방법입니다. 이 정보를 얻으려면 root 권한으로 실행해야하므로 setuid가 0이거나 sudo를 사용하여 유틸리티를 실행해야합니다. http://www.opensource.apple.com/ :

+0

그래서; 나는 그것을 알아 채지 못했다. 그것은 신비를 적어도 해결합니다. 감사. – DNS

+0

또한 sysctl 키 KERN_PROCARGS2는 '__APPLE_API_UNSTABLE'로 나열되어 있으므로 sysctl을 사용할 수 있더라도 Apple의 변덕스러운 분위기에서 변경 될 수 있습니다. – ctpenrose

5

(Mac OS X에서 사용) BSD pskvm_getargv()을 사용하여 프로세스의 명령 줄 인수를 가져옵니다.

실제 전화는 ps source code입니다. kvm_getproc2으로 검색하십시오.

이 기능 군에 대해서는 OpenBSD man page을 참조하십시오.

+1

애플의 버전은 여기)

가장 좋은 방법은 당신이 정말 안 할 경우에도 PS를 생성하고 출력을 구문 분석 아마 source/adv_cmds/adv_cmds-138.1/ps/ – Dipstick

+0

libkvm은 더 이상 사용되지 않지만 10.5 이후부터는 흥미 롭습니다. Jason Coco의 답변에 따르면 sysctl과 동일한 제한이있을 수 있습니다. – DNS