Apple, bir çıkış sorgusu değiştirme ile ilgilenmiyor gibi görünüyor.
Bununla birlikte, Yosemite'deki iyileştirmelerden biri, fırlatıcının artık kabuk komut dosyalarına sinyalleri düzgün şekilde göndermesidir. Bunun anlamı, şu şekilde bir oturum kapatma görevi yapabilmenizdir:
İşte bir logout.sh örneği:
#!/bin/sh
onLogout() {
echo 'Logging out' >> ~/Logs/logout.sh.log
exit
}
trap 'onLogout' SIGINT SIGHUP SIGTERM
while true; do
sleep 86400 &
wait $!
done
Bu, sıkışıp kalmış sinyallerden birini alana kadar onLogout
işlevi yerine getireceği zamana kadar uyuyacaktır (eşzamansız olarak, ve işareti olmadan eşzamanlı olarak yapmak) .
Tek yapmanız gereken bu komut dosyasını bir RunAtLoad
başlatma aracısı veya başlatma daemon'u kullanarak başlatmaktır ve çıkış veya kapanışta çalışacaktır, ancak görevlerin öldürülmeden önce tamamlanması için yalnızca sınırlı bir süreye sahip olduklarını unutmayın. , bu nedenle bu işlem uzun zaman alan veya geciktirilebilecek bir ağ bağlantısı gerektiren bir şey çalıştırmak için kullanılmamalıdır.
Tabii ki bu Mavericks veya önceki sürümlerde hiç kimsenin faydası yok, ancak Yosemite altında bu artık beklendiği gibi çalışıyor; bu yüzden aslında ilk etapta doğru yapıyordum, launchd
sadece sinyalleri düzgün göndermiyordum :)
NOT: Bunun çalışması için kabuk komut dosyalarının doğrudan başlatılan tarafından yürütülmesi gerekir, yani - üzerinden çağrılmamalıdır sh
. Yani ~/Library/Scripts/foo.sh
programınıza yerleştirildiyse, argümanlar şöyle görünebilir:
<key>ProgramArguments</key>
<array>
<string>~/Library/Scripts/foo.sh</string>
<string>bar</string>
</array>
<key>EnableGlobbing</key>
<true/>
line 8: syntax error near unexpected token ;'
(