Linux で実行しているプログラムの実行時間を制限したいと考えています。scons スクリプトに次のような行を入れました。
Command("com","","ulimit -t 1; myprogram")
無限ループプログラムでテストしましたが、機能せず、プログラムが永遠に実行されました。
何か不足していますか?
--tsf
Linux で実行しているプログラムの実行時間を制限したいと考えています。scons スクリプトに次のような行を入れました。
Command("com","","ulimit -t 1; myprogram")
無限ループプログラムでテストしましたが、機能せず、プログラムが永遠に実行されました。
何か不足していますか?
--tsf
ulimit -t 1
制限が 1 秒の CPU 時間に設定されていることを意味します。sleep
無限ループ プログラムが内部ループで何らかの種類を使用する場合、実質的に CPU 時間を使用しません。これは、実時間の 1 秒で強制終了されないことを意味します。実際には、1 秒の割り当てを使い切るのに数分から数時間かかる場合があります。
SCons の外でコマンドを実行するとどうなりますか? 制限を変更する権限がまったくない可能性があります...
ulimit -t 1; ./myprogram
たとえば、制限がすでに 0 に設定されている場合、次のように表示されることがあります。
bash: ulimit: cpu time: cannot modify limit: Operation not permitted
編集: Ubuntu 9.04 では -t オプションが壊れているようです。2009 年 6 月 5 日に修正がコミットされましたが、更新に反映されるまでに時間がかかる場合があります。9.10 まで修正されない可能性があります。
歴史的なメモとして、この問題は Ubuntu 10.04 では存在しなくなりました。
このスクリプトを使用することもできます。
(http://newsgroups.derkeiler.com/Archive/Comp/comp.sys.mac.system/2005-12/msg00247.htmlから取得)
#!/bin/sh
# timeout script
#
usage()
{
echo "usage: timeout seconds command args ..."
exit 1
}
[[ $# -lt 2 ]] && usage
seconds=$1; shift
timeout()
{
sleep $seconds
kill -9 $pid >/dev/null 2>/dev/null
}
eval "$@" &
pid=$!
timeout &
wait $pid
.