RT,比如要执行xx命令,但是在某些情况下该命令会hang住,所以希望如果2s内执行不完就返回,如何操作?
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 $?
}
7 回答5.3k 阅读
4 回答4k 阅读
2 回答5.9k 阅读✓ 已解决
2 回答2.5k 阅读✓ 已解决
1 回答2.3k 阅读✓ 已解决
2 回答796 阅读✓ 已解决
2 回答3.2k 阅读
如果是在shell环境下的话,可以用
last_pid=$!
记录上一个命令的进程ID,然后在sleep 2 && kill -9 $last_pid
来解决。如果是C++程序的话,可以用
setrlimit
来限制子进程的运行资源(包括CPU时间),另外再加上定时器alarm
和signal
来组织子进程进行无限制的sleep。原先写过篇blog,希望对你有帮助。