新しいプロセスを開始する前に、タスクが完了するのを待つ関数を作成したいと思います。wait
Bashに組み込まれているコマンドについて知っていますが、子プロセスでのみ機能します。別のbashセッションで起動すると失敗します。私はkill -0
pidを受け入れ、与えられたプロセスが完了するのを待つ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
最初の引数値の代わりにリテラルが印刷されます。