Anda mungkin mempertimbangkan untuk membuat Aplikasi Applescript Tetap-Buka yang mengatur / mengatur ulang pengatur waktu tidur berdasarkan keberadaan proses yang sedang berjalan. Membuat launchd plist juga merupakan solusi yang layak, namun saya masih ragu-ragu pada sintaksisnya. Perintah "pmset force sleep X" tidak memerlukan akses root, tetapi pengaturannya diatur ulang saat reboot.
Karena situasimu terdengar seperti aku tidak akan dapat mengantisipasi setiap kebutuhanmu, aku akan membuat sketsa untukmu.
property LoopTime: 5 --measured in seconds
property normalSleepTimeout: 30 --measured in minutes
property processName: "rsync" --the name of the process you're trying to find
on run
do shell script "pmset force sleep 0" --disables sleep
idle()
end
on idle
if not appIsRunning() then
do shell script ("pmset force sleep " & normalSleepTimeout as string) -- sets sleep to desired idle timeout
quit
end
return
end
on appIsRunning()
--Here's where you need to do the test that an app is running. True needs to mean "the app is running". Store the value to "result" or change the below return statement.
return result
end
Untuk hal-hal seperti rsync dan proses latar belakang, Anda harus mendapatkan yang lebih pintar dan polling fungsi-fungsi lain seperti $ top.
set result to False
if 0 < (count of (do shell script ("top -l 1 | grep" & processName as string))) then
set result to True
end
Perhatikan bahwa dalam kasus di atas, mencari hanya "rsync" akan menghasilkan false positive jika rsyncd berjalan karena "rsync" dan "rsyncd" cocok. Anda mungkin harus lebih rumit jika ini tidak berhasil untuk Anda.
Jika aplikasi adalah proses Windowed, saya akan menggunakan yang berikut ini untuk menentukan apa yang berjalan:
tell application "System Events" to set RunningAppNames to name of processes
Atau untuk pengidentifikasi bundel (lebih tepat)
tell application "System Events" to set RunningBundles to bundle identifier of processes
Ceritakan lebih banyak tentang skenario Anda dan saya akan mencoba menulis sesuatu yang lebih tepat dan dengan antarmuka pengguna yang lebih fleksibel.