Puede considerar crear una aplicación Applescript Stay-Open que establezca / restablezca el temporizador de reposo en función de la existencia de un proceso en ejecución. Crear una lista de lanzamiento también es una solución viable, sin embargo, todavía tengo dudas sobre la sintaxis. El comando "pmset force sleep X" no requiere acceso de root, pero la configuración se restablece al reiniciar.
Dado que su situación parece que no podré anticipar todas sus necesidades, esbozaré algo para usted.
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
Para cosas como rsync y procesos en segundo plano, necesitará ser más inteligente y sondear otras funciones como $ 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
Tenga en cuenta que en el caso anterior, la búsqueda de "rsync" arrojará un falso positivo si rsyncd se está ejecutando porque "rsync" y "rsyncd" coinciden. Es posible que tenga que ser más complicado si esto no funciona para usted.
Si la aplicación fuera un proceso de Windows, usaría lo siguiente para determinar qué se está ejecutando:
tell application "System Events" to set RunningAppNames to name of processes
O para identificadores de paquete (más precisos)
tell application "System Events" to set RunningBundles to bundle identifier of processes
Cuéntame más sobre tu escenario e intentaré escribir algo más exacto y con una interfaz de usuario más flexible.