どの起動エージェントまたはデーモンがプロセスを開始しているかを調べる方法


11

Autodesk Smokeをインストールした後、常に2つの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>

オートデスクからプロセスを停止できることを学びましたが、/usr/sbin/apachectl stopリブートするたびにプロセスを無効にする方法がまだわかりません。
エリオット

(後のコメント、私は知っています!)launchdが再び起動するのを止める2つの可能性のあるリード:(i)launchctl unload(plistへのパスを指定する必要があるかどうかはわかりませんが)、(ii)loginitemsにある場合システム設定ツールを使用します-> "ユーザーとグループ"-> "ログイン項目"->問題のあるエントリが見つかった場合は削除します。
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キーは、でオーバーライドできます/var/db/launchd.db/com.apple.launchd/overrides.plist。これはlaunchctl load -w、rootとして実行されると変更され、in /var/db/launchd.db/com.apple.launchd.peruser.$UID/overrides.plistlaunchctl load -wユーザーとして実行されると変更されます。

OS Xに付属のApache plistが有効になっている場合は、を実行して無効にすることができますsudo launchctl unload -w /System/Library/LaunchDaemons/org.apache.httpd.plist


PIDを取得し、launchctlをgrepしましたが、その番号で何も見つかりませんでした。
エリオット

実際に使用してみてくださいsudo launchctl listlaunchctl listユーザーlaunchdプロセスによってロードされたジョブのみが含まれているようです。
Lri

理にかなっています、ありがとう。しかし、実際には問題を解決しませんでした...質問に詳細を追加しました。
エリオット

0

これにより、を参照するすべてのジョブ定義のリストが表示されhttpdます。

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

良い考えですが、問題は解決しませんでした。結果は1つだけで、無効になっています。質問に詳細を追加しました。
エリオット

1
無効になっているからといって、起動されていないという意味ではありません。Disabledキーはで上書きすることができるoverrides.plistの下/内のファイル/var/db/launchd.db/。また、無効化されたジョブは手動で(ブート/ログインプロセス中に自動的にではなく)開始されます。
LCC

おかげで、私はそれについて知りませんでした。試したgrep -rn apache /private/var/db/launchd.db結果、1つしか見つかりませんでした。無効になっています。このサービスがどのように開始され、本当に無効にするかを理解する必要があります。
エリオット

0

launchctlの動作が変更され、サービスが強制的に有効にされた場合、 、ソースの.plistの内容は変更、別のディレクトリ(変更しないでください)が変更されます。launchctlのmanページ、および「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]\+')

またはpstree、PIDを手動で指定してコマンドを使用します。たとえば、

pstree 92
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.