所以我不确定这是否有意义,所以我会尝试详细说明。
我有这个程序(前端),可以使用 ./frontend 启动。终端将停留在程序上,直到您输入! (或 ctrl C)。我想做的就是这样
./frontend.sh
Wait 30
!
但它卡在了程序上。我还可以在另一个终端中使用 Killall 前端来杀死它,但这并不能帮助我在脚本中做到这一点。我有什么办法可以克服这个问题吗?
答案1
除非另有说明,外壳程序按顺序执行每个命令。如果您的脚本调用frontend.sh
, 并且 frontend.sh
不退出,那么 shell 将只是等待它退出,而不会执行以下命令。
实现目标的一种方法是frontend.sh
在后台启动&
操作员,然后通过将其进程 ID(可通过特殊参数获得$!
)传递给kill
命令来终止它。
#!/bin/sh
# start frontend.sh in the background
./frontend.sh &
sleep 30
# the special parameter $! holds the process ID of the last background process
if kill $!; then
echo "frontend.sh was killed, do more work here"
else
echo "failed to kill frontend.sh, handle the error here"
fi