Bash 函数将等待进程完成后再开始新进程

Bash 函数将等待进程完成后再开始新进程

我想创建一个函数,该函数将等到作业完成后再开始新进程。我知道waitbash 中内置的命令,但它仅适用于子进程。如果我在不同的 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打印出文字而不是第一个参数的值。

相关内容