Możesz rozważyć stworzenie aplikacji Applescript Stay-Open, która ustawia / resetuje licznik czasu uśpienia w zależności od istnienia uruchomionego procesu. Stworzenie uruchomionej listy odtwarzania jest również realnym rozwiązaniem, jednak nadal jestem niepewny co do składni. Polecenie „pmset force sleep X” nie wymaga dostępu do katalogu głównego, ale ustawienia są resetowane po ponownym uruchomieniu.
Ponieważ twoja sytuacja wygląda na to, że nie będę w stanie przewidzieć wszystkich twoich potrzeb, coś naszkicuję.
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
W przypadku takich rzeczy, jak rsync i procesy w tle, musisz być bardziej sprytny i odpytywać inne funkcje, takie jak $ 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
Zauważ, że w powyższym przypadku wyszukiwanie po prostu „rsync” zwróci fałszywie dodatni, jeśli rsyncd jest uruchomiony, ponieważ oba „rsync” i „rsyncd” są zgodne. Być może będziesz musiał się bardziej podstępnie, jeśli to nie zadziała.
Gdyby aplikacja była procesem okienkowym, użyłbym następujących elementów, aby ustalić, co się dzieje:
tell application "System Events" to set RunningAppNames to name of processes
Lub w przypadku identyfikatorów pakietów (bardziej precyzyjnie)
tell application "System Events" to set RunningBundles to bundle identifier of processes
Powiedz mi więcej o swoim scenariuszu, a ja postaram się napisać coś dokładniejszego i bardziej elastycznego interfejsu użytkownika.