gpt4 book ai didi

linux - 等待另一个程序启动的进程终止

转载 作者:太空宇宙 更新时间:2023-11-04 11:02:22 25 4
gpt4 key购买 nike

所以我正在创建一个快速脚本,基本上启动 xboxdrv,然后启动 steam 的游戏以启用 Controller 支持。是的,虽然大多数支持 Controller 的游戏会自动与 Xbox 360 Controller 配合使用,但有些游戏需要您在 xpad 驱动程序下运行 Controller ,否则它会出于某种原因无法识别 Controller 。有问题的游戏是 Linux (XUbuntu) 上的 Bit.Trip Runner 2。

我遇到的问题是试图让脚本等待游戏退出(因为它是由 Steam 自己的命令启动的),然后终止 xboxdrv,以释放内存,但发生的事情是当游戏退出,我必须进入终端并按 Ctrl+C 才能移动它。

如果可能,请通俗易懂地解释一下,因为这是我的第一个完整的 linux 批处理脚本。以下是有问题的脚本:

sudo --validate
sudo xboxdrv --silent --detach-kernel-driver --mimic-xpad --dbus session & sleep 2
steam steam://rungameid/$APPID #<-- I want the game to exit to then kill xboxdrv
wait -n $! #<-- If I don't put wait, it will immediately kill xboxdrv after the game launches
sudo killall xboxdrv
exit 0

最佳答案

好吧,问题似乎是 wait 没有正确应用,这与子进程有关。如果不是它正在等待 xboxrdv,那就是它无法正确应用自身。环顾四周后,我偶然发现了 this question ,这给了我等待所需的代码。所以我最后做的是添加那段代码和 pgrep -x 命令,这样它就可以获取并等待正确的 pid。

最后,重要的部分代码变成了这样:

if [ "$GAMENAME" = "BTR2" ] || [ "$GAMENAME" = "Runner 2" ]; then
APPID=218060
GameProc=[r]unner2
fi

sudo --validate
sudo xboxdrv --silent --quiet --detach-kernel-driver --mimic-xpad --dbus session & sleep 2
steam steam://rungameid/$APPID & sleep 20

check_run_and_grab(){
if ps aux | grep "$GameProc" > /dev/null
then
GamePID=$(pgrep -x "$GameProc")
while kill -0 "$GamePID";do
sleep 5
done
sudo killall xboxdrv
exit 0
else
echo "Game process not found, waiting 5 seconds and trying again"
sleep 5
check_run_and_grab
fi
}

check_run_and_grab

对我来说,唯一能让它变得更好的是它不关心游戏参数的大写(第一个 if 语句)。

关于linux - 等待另一个程序启动的进程终止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26480441/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com