在Linux下如何限制命令执行的时间?

RT,比如要执行xx命令,但是在某些情况下该命令会hang住,所以希望如果2s内执行不完就返回,如何操作?

阅读 15.3k
8 个回答

如果是在shell环境下的话,可以用last_pid=$!记录上一个命令的进程ID,然后在sleep 2 && kill -9 $last_pid来解决。
如果是C++程序的话,可以用setrlimit来限制子进程的运行资源(包括CPU时间),另外再加上定时器alarmsignal来组织子进程进行无限制的sleep。原先写过篇blog,希望对你有帮助。

定时器,然后在信号处理函数中处理。

你们写这么多有没有考虑过coreutils的感受啊, 它本身就带了timeout程序。

function __EXEC_COMMAND_WITH_TIMEOUT() {
    COMMAND=$1
    TIMEOUT=$2

    $COMMAND 2> /dev/null &
    PID=$!
    sleep $TIMEOUT && ps -p $PID -o pid,ppid | grep $$ | awk "{print $1}" 2> /dev/null | xargs kill &
    wait $PID

    return $?
}

command & pid=$! ;sleep 2;kill -9 $pid

可以 fork 一个子进程
父进程记录此刻时间
然后在子进程里执行你要执行的 xx 命令
父进程等待2s 后 杀掉子进程就可以了

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题