在 shell 脚本中如何创建等待并检查特定程序是否正在运行的脚本,如果正在运行则等到程序死亡,程序死亡后该脚本将显示消息“现在你的程序已死亡”,仅此而已,示例:我正在玩游戏,现在我想创建一个脚本来发现我的游戏是否正在运行,如果正在运行则等到游戏停止,游戏停止后该脚本会向我显示“现在你的游戏已死亡”的消息。
答案1
如果我使用创建 BASH 脚本
$ cat > blah
#!/bin/bash
read
ls
使用使其可执行chmod
chmod +x blah
然后运行它
$ bash blah
-- script has stopped as i type this, it will continue on enter
bionic focal-desktop-amd64.iso kde_neon zsync_disco.sh
blah focal-desktop-amd64.iso.zs-old qa_query.py zsync_eoan.sh
eoan-desktop-amd64.iso focal-desktop-amd64.iso.zsync qatracker.py zsync_focal.sh
eoan-desktop-amd64.iso.zsync focal-desktop-amd64.iso.zsync.old siduction-patience-lxqt-amd64-latest.iso
脚本运行并暂停,等待read
完成。我输入文本“-- 当我输入此内容时脚本已停止,它将在输入后继续”并按下Enter。
只有到那时(read
完成后)ls
命令才会执行。
我可以在行尾添加“&”,read
这样它就可以在后台运行,从而ls
无需等待就可以继续运行......但你想要的实际上是默认值。
答案2
您可以ps
循环运行,直到程序运行完毕。当程序完成时,while 循环就结束了。
#!/bin/bash
appName="appname"
appCount=$(ps ax | grep $appName | grep -v grep | wc -l)
while [ "$appCount" -gt "0" ]
do
sleep 1
appCount=$(ps ax | grep $appName | grep -v grep | wc -l)
done
zenity --info --title="End" --text="Now your game is dead."
输入应用程序名称而不是appname
。done
输入您想要显示消息的行后。我使用 zenity 作为通知对话框。echo
如果您想在终端窗口中显示消息,您可以使用其他内容。