扫码关注官方订阅号
RT,比如要执行xx命令,但是在某些情况下该命令会hang住,所以希望如果2s内执行不完就返回,如何操作?
业精于勤,荒于嬉;行成于思,毁于随。
如果是在shell环境下的话,可以用last_pid=$!记录上一个命令的进程ID,然后在sleep 2 && kill -9 $last_pid来解决。 如果是C++程序的话,可以用setrlimit来限制子进程的运行资源(包括CPU时间),另外再加上定时器alarm和signal来组织子进程进行无限制的sleep。原先写过篇blog,希望对你有帮助。
last_pid=$!
sleep 2 && kill -9 $last_pid
setrlimit
alarm
signal
受不了了,明明就有现成的TIMEOUT(1)
定时器,然后在信号处理函数中处理。
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
你们写这么多有没有考虑过coreutils的感受啊, 它本身就带了timeout程序。
可以 fork 一个子进程 父进程记录此刻时间 然后在子进程里执行你要执行的 xx 命令 父进程等待2s 后 杀掉子进程就可以了
微信扫码关注PHP中文网服务号
QQ扫码加入技术交流群
扫描下载App
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
PHP学习
技术支持
返回顶部
如果是在shell环境下的话,可以用
last_pid=$!
记录上一个命令的进程ID,然后在sleep 2 && kill -9 $last_pid
来解决。如果是C++程序的话,可以用
setrlimit
来限制子进程的运行资源(包括CPU时间),另外再加上定时器alarm
和signal
来组织子进程进行无限制的sleep。原先写过篇blog,希望对你有帮助。受不了了,明明就有现成的
TIMEOUT(1)
定时器,然后在信号处理函数中处理。
command & pid=$! ;sleep 2;kill -9 $pid
你们写这么多有没有考虑过coreutils的感受啊, 它本身就带了timeout程序。
可以 fork 一个子进程
父进程记录此刻时间
然后在子进程里执行你要执行的 xx 命令
父进程等待2s 后 杀掉子进程就可以了