最近接獲報案在 MacOS 上的 Apache 被啟動關不掉,依稀記得 MacOS 上有內建 apache,從 ps ax
看起來是使用者誤開內建的 apache
$ ps ax | grep apache 2031 ?? S 0:00.35 /usr/sbin/httpd -D FOREGROUND
先講解決辦法,用 launchctl unload
來把 apache 停用,並且不會在開機的時候啟動
$ sudo launchctl unload -w /System/Library/LaunchDaemons/org.apache.httpd.plist
談談 launchctl 這個東西
如果你稍微了解系統,應該會知道 init(sysvinit)、systemctl(systemd) 這兩個管理服務工具,而 MacOS 的管理工具就是 launchctl 來管理整個作業系統的 services 及 processes,而 Launch 分為兩種:
- Launch Daemon:在開機時載入 (load) 。
- Launch Agent:在使用者登入時載入。
- XPC Service
- Login Items:在使用者登入時載入,這個在於「偏好設定」->「使用者與群組」->「登入項目」這邊可以找到設定。
太詳細的東西在 Reference 可以點進去看,這邊只講淺的(太嫩)
大部分的設定檔會放在以下位置的 plist
:
- /System/Library/LaunchDaemons
- /Library/LaunchDaemons
- /System/Library/LaunchAgents
- /Library/LaunchAgents
利用 launchctl list
可以看到會被自動帶起來的 service / processes
Reference:
Mac OS X 的 Launch Daemon / Agent
Daemons and Services Programming Guide
Technical Note TN2083: Daemons and Agents