프로세스를 시작하는 시작 에이전트 또는 데몬을 찾는 방법


11

Autodesk Smoke를 설치 한 후 두 개의 httpd 프로세스를 항상 실행하고 있으며 중지하고 싶습니다. 을 사용하면 sudo killall httpd중지되고 즉시 다시 시작됩니다. 활동 모니터는 상위 프로세스가 시작되었음을 표시하지만이를 시작하기 위해 시작중인 에이전트 또는 디먼을 어떻게 판별합니까?

launchctl list | grep httpd 이 결과를 보여줍니다.

302 -   0x7f94ea700dd0.anonymous.httpd  
92  -   org.apache.httpd

살펴보고 /System/Library/LaunchDaemons/org.apache.httpd.plist다음을 보여줍니다. 로 설정되어 있음을 알 수 있습니다 disabled. launchd이상한 이름을 가진 다른 항목은 파일 시스템 검색에 표시되지 않으므로 그 이름이 무엇인지 전혀 모릅니다.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Disabled</key>
    <true/>
    <key>Label</key>
    <string>org.apache.httpd</string>
    <key>EnvironmentVariables</key>
    <dict>
        <key>XPC_SERVICES_UNAVAILABLE</key>
        <string>1</string>
    </dict>
    <key>ProgramArguments</key>
    <array>
        <string>/usr/sbin/httpd</string>
        <string>-D</string>
        <string>FOREGROUND</string>
    </array>
    <key>OnDemand</key>
    <false/>
</dict>
</plist>

Autodesk에서 프로세스를 중지 할 수 있다는 것을 /usr/sbin/apachectl stop알았지 만 재부팅 할 때마다 프로세스 를 비활성화하는 방법을 아직 모릅니다.
Elliott

(늦은 의견, 알고 있습니다!) 두 가지 가능한 리드가 다시 시작되지 않도록 시작했습니다. (i) launchctl unload(plist의 경로를 지정해야하는지 모르겠지만) 시스템 환경 설정 도구-> "사용자 및 그룹"-> "로그인 항목"-> 문제가있는 항목 삭제를 사용하십시오.
Vivek

답변:


5

launchctl listpid 에 대한 출력을 grep 할 수 있습니다 .

$ pgrep -fl foo
40679 bash /tmp/foo
$ launchctl list|grep 40679
40679   -   com.example.foo

그런 다음라는 이름의 파일의 예를 들어보기를위한 com.example.foo.plist에서 ~/Library/LaunchAgents/, /Library/LaunchAgents/또는, /Library/LaunchDaemons/.

편집 : Disabled 키는 root로 실행될 /var/db/launchd.db/com.apple.launchd/overrides.plist때 수정 launchctl load -w되거나에서 사용자로 실행될 /var/db/launchd.db/com.apple.launchd.peruser.$UID/overrides.plist때 수정되는 에서 재정의 될 수 있습니다 launchctl load -w.

OS X과 함께 제공되는 Apache plist가 활성화 된 경우을 실행하여 비활성화 할 수 있습니다 sudo launchctl unload -w /System/Library/LaunchDaemons/org.apache.httpd.plist.


PID를 얻은 다음 launchctl을 그렙했지만 그 숫자로 아무것도 찾지 못했습니다.
Elliott

실제로를 사용해보십시오 sudo launchctl list. launchctl list사용자가 시작한 프로세스에 의해로드 된 작업 만 포함하는 것 같습니다.
Lri December

알겠습니다. 감사합니다. 그러나 실제로 문제를 해결하지 못했습니다 ... 질문에 더 자세한 내용을 추가했습니다.
Elliott

0

여기에는를 참조하는 모든 작업 정의 목록이 제공됩니다 httpd.

grep -lR httpd /System/Library/Launch*/ /Library/Launch*/ ~/Library/LaunchAgents/

좋은 생각이지만 문제를 해결하지 못했습니다. 결과는 하나 뿐이며 비활성화되어 있습니다. 질문에 더 자세한 내용을 추가했습니다.
Elliott

1
비활성화되어 있다고해서 시작되지 않았다는 의미는 아닙니다. Disabled키는 오버라이드 (override) 할 수 overrides.plist아래 /에있는 파일 /var/db/launchd.db/. 또한 비활성화 된 작업이 여전히 수동으로 시작될 수 있습니다 (부팅 / 로그인 프로세스 중에 자동이 아님).
LCC

고마워, 나는 그것에 대해 몰랐다. 나는 grep -rn apache /private/var/db/launchd.db하나의 결과 만 시도했다 . 비활성화되어 있습니다. 이 서비스가 시작되는 방법과 실제로 비활성화하는 방법을 알아야합니다.
Elliott

0

launchctl의 동작은 서비스가 강제로 사용하는 경우, 그것은 것에 변경 되지 소스 .plist의 내용을 수정할 수 있지만 (수정 안) 별도의 디렉토리. 설명서 페이지에서 launchctl을 확인하고 "load"명령에서 "-w"옵션을 확인하십시오. 따라서 단순히 파일을 검사하면 파일이 비활성화되어 있는지 여부를 알 필요가 없습니다. 분명히 비활성화되지 않았습니다 :)

"launchctl unload -w org.apache.httpd.plist"를 시도하십시오. 그래도 문제가 해결되지 않으면 "launchctl start org.apache.httpd.plist"를 사용하여 필요할 때 시작할 수 있습니다.

그래도 작동하지 않으면 "launchctl remove org.apache.httpd.plist"를 시도하면 수동으로 시작할 수 없습니다.


0

레이블 값 (예 :)을 기준으로 다음 명령을 사용하여 org.apache.httpd찾을 수 있습니다 .plist.

find /System/Library/Launch* /Library/Launch* ~/Library/Launch* -name '*.plist' -print -exec /usr/libexec/PlistBuddy -c "Print Label" {} ';' | grep org.apache.httpd -A1

프로세스를 시작한 것을 찾으려면 상위 PID를 확인하십시오.

ps -f $(launchctl list | grep org.apache.httpd | grep -o '^[0-9]\+')

또는 pstreePID를 수동으로 지정 하여 명령을 사용하십시오 . 예 :

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