14/07/2025

MacOS – daemons and launchd agents

daemons sistem basladiginda otomatik baslatilan user etkisine ihtiyac duymayan ve arka planda calisan servicelerdir, örnegin “timed: time synchronisation”
Agents kullanici login olunca baslar ve bir user session i icinde calisir.

plist ise property list tir ve agent ve daemon larin calismasinin nasil olacaginin konfigürasyonudur.

Plist

cat /Library/LaunchDaemons/com.microsoft.fresno.plist

<?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>Label</key>
        <string>com.microsoft.fresno</string>
        <key>Program</key>
        <string>/Applications/Microsoft Defender.app/Contents/MacOS/wdavdaemon</string>
        <key>ProgramArguments</key>
        <array>
            <string>wdavdaemon</string>
            <string>privileged</string>
        </array>
        <key>RunAtLoad</key>
        <true/>
        <key>KeepAlive</key>
        <true/>
        <key>WorkingDirectory</key>
        <string>/Applications/Microsoft Defender.app/Contents/MacOS</string>
    </dict>
</plist>

Bununla ilgili daha fazla detay https://www.launchd.info/ bulunabilir.

plist formats

plist dosyasi binary, xml veya json formatinda olabilir.

Eger dosya binary formatta ise plutil -p ile icerigi gösterilebilir.

plutil olarak bu setting tipleri convert de edilebilir. man plutil ile yapilabilecekler görülebilir.

Cron scheduling

plist dosyalari cron gibi scheduling te yapabilir. bunun nasil olabilecegi https://www.launchd.info/ de anlatilmakta.

launch control utility

launchtl list –> user context i icinde ki servisleri gösterir

sudo launchtl list –> sistemde ki tüm serviceleri gösterir.

Eger calisan bir servisin plistini bulmak istersek (ki plist pek cok yerde olabiliyor)
once activity monitorden onun PID sini bulmamiz gerekiyor.

(sudo launchctl list;launchctl list)|grep 62303
62303     0.  com.fleetdm.orbit

yaparak tam adini bulacagiz. Takiben asagida ki komut ile

launchctl dumpstate | grep -B 1 -A 4 -E "active count = [1-9]"|grep com.fleetdm.orbit

veya

launchctl dumpstate|grep -B 1 -A 10 com.apple.lskdd|grep "path ="

ile plistdosyasinin yerini bulabiliriz takibende plutil ile okuyabiliriz.