Puedes probar estas tres posibles soluciones para ver si alguna es mejor que la incorporada Automatizador acción.
El primero es un manejador de AppleScript simple que toma una lista de excepciones (aplicaciones que están exentas de ser abandonadas), y luego procede a enviar un comando de abandono a todas las demás (siendo éstas cualquier proceso de aplicación que no pertenezca a un archivo en el /System
directorio por lo tanto, Buscador y Eventos del sistema se salvará, pero Automatizador no lo hará a menos que se especifique en la lista de excepciones, X
):
to quitAll(X as list)
local X
tell application id "com.apple.SystemEvents" to script Apps
property list : the bundle identifier of processes ¬
where the POSIX path of its application file ¬
does not start with "/System"
property locked : X
end script
tell Apps to repeat with id in its list
ignoring application responses
set A to the application id id
if A's name is not in locked ¬
then try
quit A
end try
end ignoring
end repeat
end quitAll
El segundo utiliza el mismo método que el anterior para recuperar una lista de aplicaciones en ejecución, pero coge su pid
números. Estos se pasan en masa a un do shell script
llamar a kill
las aplicaciones (algunas personas se ponen nerviosas con esto, posiblemente porque el nombre del comando suena como si fuera una mala acción a realizar, pero es perfectamente seguro, y muy estándar. Las aplicaciones también suelen guardar sus estados de ventana y documento, por lo que el kill
puede permitirles recuperar el .savedState
datos cuando se vuelva a abrir más tarde.
to kill(X as list)
local X
tell application id "com.apple.SystemEvents" to script Apps
property parent : a reference to every process where the ¬
POSIX path of its application file doesn't start with ¬
"/System"
property id : my unix id
property name : my short name
property locked : X
end script
tell Apps to repeat with i from 1 to length of id
if name's item i is in locked ¬
then set id's item i to []
end repeat
set my text item delimiters to space
"kill " & integers in the id of Apps
do shell script result
end kill
La última solución es un manejador AppleScript-ObjectiveC que, una vez más, obtiene una lista de las aplicaciones en ejecución que no se encuentran en ningún lugar del /System
y no aparecen (por su nombre) en la lista que se pasa al manejador:
to terminate(X as list)
set pred to "!bundleURL.path LIKE '/System/*'" & ¬
"&&!localizedName IN[c] %@"
script
use framework "Foundation"
set [A, P] to a reference to my [¬
NSWorkspace's sharedWorkspace's runningApplications, ¬
NSPredicate's predicateWithFormat_(pred, X)]
(A's filteredArrayUsingPredicate:P)'s terminate
end script
run result
end terminate
No he probado este manejador para ver qué permisos hay que conceder, ya que no quería que todos mis programas terminaran. Pero hazme saber si hay algún contratiempo y te dirigiré en consecuencia. La palabra terminate
dentro de el manipulador puede ser sustituido por forceTerminate
(distingue entre mayúsculas y minúsculas) para forzar la salida de cada aplicación. Esto, si fuera yo, sería realmente mi preferencia, ya que he configurado mi sistema para guardar el estado de las aplicaciones en las terminaciones forzadas, y evita el "¿Quiere guardar el documento actual?" banalidad.