Як дізнатися, який агент запуску чи демон демон починає процес


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але все ще не знаю, як відключити його після кожного перезавантаження.
Елліотт

(Пізній коментар, я знаю!) Дві можливі причини, щоб зупинити запуск запуску його знову: (i) launchctl unload(хоча я не знаю, чи потрібно це вам, щоб вказати шлях до списку), (ii) якщо він у ваших логінах , скористайтеся інструментом «Налаштування системи» -> «Користувачі та групи» -> «Елементи входу» -> Видалити невдалий запис, якщо його знайдено.
Вівек

Відповіді:


5

Ви можете зібрати висновок launchctl listдля pid:

$ 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/.

Редагувати: ключ відключеного може бути /var/db/launchd.db/com.apple.launchd/overrides.plistзамінений, який змінюється, коли launchctl load -wвін запускається як root, або в /var/db/launchd.db/com.apple.launchd.peruser.$UID/overrides.plist, який змінюється, коли launchctl load -wзапускається як користувач.

Якщо ввімкнено пліст Apache, який постачається з OS X, ви можете відключити його, запустивши sudo launchctl unload -w /System/Library/LaunchDaemons/org.apache.httpd.plist.


Я отримав PID, потім схопив запуск, але нічого з цим номером не знайшов.
Елліотт

Насправді спробуйте використовувати sudo launchctl list. launchctl listздається, що включає лише завдання, завантажені користувачем процесом запуску.
Лрі

Добре, що має сенс, дякую. Але насправді не вирішили проблему ... Я додав більше деталей до питання.
Елліотт

0

Це дає вам список усіх визначень завдань, на які посилається httpd.

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

Гарна ідея, але не вирішила проблему. Є лише один результат, і він відключений. Я додав більше деталей до питання.
Елліотт

1
Тільки тому, що він відключений, не означає, що він не був запущений. DisabledКлюч може бути перевизначені overrides.plistфайлами в / нижче /var/db/launchd.db/. Також відключене завдання все ще може бути запущено вручну (не автоматично під час завантаження / входу).
LCC

Спасибі, я про це не знав. Я спробував grep -rn apache /private/var/db/launchd.dbі знайшов лише один результат. Це вимкнено. Мені потрібно розібратися, як запускається ця послуга та як її справді відключити.
Елліотт

0

Поведінка startctl змінилася тим, що якщо послуга примусово включена, вона не буде змінювати вміст вихідного .plist, а окремий каталог (який ви не повинні змінювати). Перевірте головну сторінку на startctl та параметр "-w" під командою "load". Отже, просто вивчивши файл, не потрібно буде говорити, чи його відключено чи ні. Очевидно, його не відключено :)

Спробуйте "startctl unload -w org.apache.httpd.plist". Якщо це працює для вас, ви все одно зможете запустити його на вимогу за допомогою "startctl start org.apache.httpd.plist"

Якщо це не працює, спробуйте "startctl delete 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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.