在OS XI上,要执行一个osascript命令,该命令要等到由其完整.app路径指定的某个应用程序退出后,再启动另一个应用程序,例如使用/usr/bin/open -n /Applications/MyApp.app
。
如何实现等待应用程序退出的等待?
一种常见的方法是执行等待循环,例如pgrep
:
while pgrep -f /Applications/TextEdit.app 2>/dev/null ; do sleep 1.0 ; done
不幸的是,这会睡得太多,并延迟其他应用程序的启动。
另外,如果您知道该应用程序正在运行,则可以使用/usr/bin/open
:
open -g -W /Applications/TextEdit.app
不幸的是,这将在未运行的情况下打开该应用程序。您可以在调用之前检查它是否正在运行/usr/bin/open
,但这不是原子的:它可能正在关闭,并且open命令可以重新启动它。
两者都可以封装在osascript中(尽管可能没有多大意义)。
osascript -e 'do shell script "while pgrep -f /Applications/TextEdit.app 2>/dev/null ; do sleep 1.0 ; done"'
osascript -e 'do shell script "open -g -W /Applications/TextEdit.app"'
附带说明:open -W
实际上对进程执行kqueue等待(非轮询等待)。可能还有其他命令调用kqueue并执行相同的任务,而没有重新启动应用程序的风险。在C中很容易实现。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句