Bash機能は、新しいプロセスを開始する前にプロセスが完了するのを待ちます。

Bash機能は、新しいプロセスを開始する前にプロセスが完了するのを待ちます。

新しいプロセスを開始する前に、タスクが完了するのを待つ関数を作成したいと思います。waitBashに組み込まれているコマンドについて知っていますが、子プロセスでのみ機能します。別のbashセッションで起動すると失敗します。私はkill -0pidを受け入れ、与えられたプロセスが完了するのを待つbash関数を書いた。しかし、うまくいかないようです。特定のジョブの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"

また、2番目のechoコマンドに一重引用符を使用すると、$1最初の引数値の代わりにリテラルが印刷されます。

関連情報