テストのために、それぞれ1秒間フォルダ内のいくつかのアプリケーションを実行する次のbashスクリプトがあります。
#!/bin/bash
for app in ./*.app
do
myrunner $app &
sleep 1
killall -9 myrunner
done
しかし、「killall -9」を使用することは実際には最善の方法ではないようです。より良い方法がありますか?
答え1
timeout
たとえば、を使用したいと思います。
timeout 1s myrunner $app
答え2
$!
最後のバックグラウンドプロセスのpidなので、次のようになります。
do
myrunner $app &
pid=$!
sleep 1
kill -9 $pid
done
sleep
バックエンドがないため、中間変数に割り当てる必要はありません。つまり、kill -9 $!
。
有用な関連変数は、$?
最後のコマンドの終了状態であり、WRTバックグラウンドプロセスから次のように取得できます。
somecommand & wait $!
status=$?
答え3
テスト対象に1を提供します。壁時計時間、いいえ営業時間。これは大きな変化をもたらします。
完了基準を設定せずに一定時間だけ実行するのはなぜですか?これにより、テストしたいものが実際に完了したという保証はありません(特に後で実行するテストが長い場合)。