실행중인 프로세스의 존재에 따라 절전 타이머를 설정 / 재설정하는 Stay-Open Applescript 응용 프로그램을 만드는 것을 고려할 수 있습니다. 발사 된 plist를 만드는 것도 가능한 해결책이지만 여전히 문법에 흔들립니다. "pmset force sleep X"명령은 루트 액세스가 필요하지 않지만 재부팅시 설정이 재설정됩니다.
귀하의 상황이 귀하의 모든 요구를 예상 할 수없는 것처럼 들리므로, 귀하를 위해 무언가를 스케치하겠습니다.
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
rsync 및 백그라운드 프로세스와 같은 것들을 위해서는 더 영리하고 $ 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
위의 경우 "rsync"와 "rsyncd"가 모두 일치하므로 rsyncd가 실행 중이면 "rsync"만 검색하면 오 탐지가 반환됩니다. 이것이 효과가 없다면 더 까다로워 야 할 수도 있습니다.
응용 프로그램이 Windowed 프로세스 인 경우 다음을 사용하여 실행중인 것을 결정합니다.
tell application "System Events" to set RunningAppNames to name of processes
또는 번들 식별자 (보다 정확한)
tell application "System Events" to set RunningBundles to bundle identifier of processes
귀하의 시나리오에 대해 자세히 알려 주시면보다 정확한 사용자 인터페이스를 사용하여보다 정확하게 작성해 드리겠습니다.