我正在为我的应用程序创建一个命令行工具。
它使用pkgbuild
和productbuild
来创建包。它是一个launchdaemon
二进制文件。
我有preinstall
和postinstall
个脚本。
安装后,可能在postinstall
脚本中,我需要检测Firefox是否正在运行,然后提示用户需要重启Firefox。
有可能吗?怎么样?
脚本的一些摘录,它是postinstall脚本的一部分。
.........
## Check if Firefox is running in the background with no tab/window open.
function restart_empty_firefox (){
echo "Restarting firefox if no tab is opened. "
firefoxRunning=$(osascript \
-e 'tell application "System Events" to set fireFoxIsRunning to ((count of (name of every process where name is "Firefox")) > 0)' \
-e 'if fireFoxIsRunning then' \
-e 'set targetApp to "Firefox"' \
-e 'tell application targetApp to count (every window whose (closeable is true))' \
-e 'else' \
-e 'return 0' \
-e 'end if')
if [ $firefoxRunning -eq 0 ]; then
echo 'Firefox is in the background with no window and so quitting ...'
osascript -e 'quit app "Firefox"'
else
##### show a dialog to the user to restart Firefox
fi
}
firefox_update # not shown here
restart_empty_firefox
.............
答案 0 :(得分:2)
您可以使用流程状态(ps
)工具:
ps aux | grep '[F]irefox.app' | awk '/firefox$/ {print $2}'
<强>结果强>:
82480
这告诉我们Firefox.app
确实正在运行(进程82480)。
编辑:由于您似乎倾向于使用osascript
的方向,这是一个示例,要求用户重新启动Firefox(完全控制在他们手中):
#!/bin/bash
osascript <<'END'
set theApp to "Firefox"
set theIcon to "Applications:Firefox.app:Contents:Resources:firefox.icns"
tell application "System Events"
if exists process theApp then
display dialog "Warning: Mozilla " & theApp & " should be closed." buttons {"Continue"} with icon file theIcon default button 1
if the button returned of the result is "Continue" then
end if
end if
display notification "Installation complete" with title "Application Package" subtitle "Please relaunch " & theApp
delay 3
end tell
END
如果您的脚本具有足够的权限,那么建议使用quit
而不是公然删除该进程。最终应该如何做,否则只要求用户请退出并重新启动Firefox本身 - 问题就解决了。