我想创建一个函数,该函数将等到作业完成后再开始新进程。我知道wait
bash 中内置的命令,但它仅适用于子进程。如果我在不同的 bash 会话中启动,它将失败。我编写了一个 bash 函数,kill -0
它接受 pid 并等待给定进程完成。然而,它似乎不起作用。假设某个特定作业的 pidsleep 60 &
是 4569,当我输入 时./pidwait.sh 4569
,没有任何打印结果。我究竟做错了什么?
#!/usr/bin/env bash
function pidwait()
{
while kill -0 "$1"; do
echo "Process $1 still running..."
sleep 1
done
echo 'Process $1 is done'
}
答案1
您正在脚本中创建一个函数但从未使用它。您可以获取该脚本,然后调用pidwait 4569
(无 ./)或添加对脚本内函数的调用:
#!/usr/bin/env bash
function pidwait()
{
while kill -0 "$1"; do
echo "Process $1 still running..."
sleep 1
done
echo "Process $1 is done"
}
pidwait "$1"
此外,在第二个 echo 命令中使用单引号将导致$1
打印出文字而不是第一个参数的值。