設定された時間内にコマンドを呼び出し、時間が経つと終了する方法はありますか? [コピー]

設定された時間内にコマンドを呼び出し、時間が経つと終了する方法はありますか? [コピー]

重複の可能性:
指定した時間だけコマンドを実行し、タイムアウトした場合は中断します。

このようなコマンドが必要な場合は、継続的な統合ビルドスクリプトを開発しています。デフォルトでは、コマンドが終了する前に実行されるように設定されたタイムアウトでコマンドを開始する必要があり、コマンドがバックグラウンドでタイムアウトプロセスを開始した場合は、進行中のすべてのコマンドが待機せずにすぐに実行する必要があります。一種の非同期並行性です。

これが私が想像するものです:

timelimited --limit=10 'somecommand --someoptions'
someothercommand //This gets launched immediately once 'timelimited' is done creating the background process

ベストアンサー1

timeoutと使用できない場合doalarm(OS Xなど)、次のものを使用できますexpect

timeout() {

    time=$1

    # start the command in a subshell to avoid problem with pipes
    # (spawn accepts one command)
    command="/bin/sh -c \"$2\""

    expect -c "set echo \"-noecho\"; set timeout $time; spawn -noecho $command; expect timeout { exit 1 } eof { exit 0 }"    

    if [ $? = 1 ] ; then
        echo "Timeout after ${time} seconds"
    fi

}

おすすめ記事