Shell 脚本将两个函数作为子进程运行(通过 &)。
他们俩都进入了睡眠状态(通过 sleep 命令)。
可以叫醒他们吗?
我有他们的pid。
PS
我不想用 & 运行 sleep 并等待
答案1
一种相当野蛮的方法是终止sleep
进程(而不是终止脚本/函数运行的整个子 shell)。考虑以下 shell 脚本:
#!/bin/bash
sleep 20
echo "Done!"
或者,使用一个函数:
#!/bin/bash
function gotosleep()
{
sleep 20
echo "Done!"
}
gotosleep &
sleep 60 # Not really necessary, keeps the script in foreground.
然后,找到sleep
进程:
$ ps -ef | grep sleep
you PID PGID ... sleep 20
并杀死它:
$ kill PID
然后您的脚本将输出(至少在bash
):
./script.sh: line 2: PID Terminated sleep 20
Done!
既然你不想wait
这样做,那么你就必须处理 Bash 的小消息。如果你改变主意,请看一下这个问题:
sleep 20 &
if wait $! 2>/dev/null; then
# Keep working
continue
else
echo "Done!"
return # from function
fi