杀死所有持续超过一分钟的R进程

前端之家收集整理的这篇文章主要介绍了杀死所有持续超过一分钟的R进程前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我使用crontask来定期运行Rscript.不幸的是,我需要在一小部分aws中执行此操作,并且进程可能会挂起,从而建立越来越多的进程,直到整个系统滞后.

我想写一个crontask来杀死持续时间超过一分钟的所有R进程.我想出了

if [[ "$(uname)" = "Linux" ]];then killall --older-than 1m "/usr/lib/R/bin/exec/R --slave --no-restore --file=/home/ubuntu/script.R";fi

我直接从htop复制了任务,但是没有像我所期望的那样工作.我得到没有这样的文件或目录错误,但我已经检查了几次.

我需要杀死持续时间超过一分钟的所有R进程.我该怎么做?

您可能希望避免从其他用户杀死进程,并在SIGTERM(kill -15)之后尝试SIGKILL(kill -9).这是一个脚本,您可以使用CRON工作每分钟执行一次:
#!/bin/bash

PROCESS="R"
MAXTIME=`date -d '00:01:00' +'%s'`

function killpids()
{
    PIDS=`pgrep -u "${USER}" -x "${PROCESS}"`

    # Loop over all matching PIDs
    for pid in ${PIDS}; do
        # Retrieve duration of the process
        TIME=`ps -o time:1= -p "${pid}" |
              egrep -o "[0-9]{0,2}:?[0-9]{0,2}:[0-9]{2}$"`

        # Convert TIME to timestamp
        TTIME=`date -d "${TIME}" +'%s'`

        # Check if the process should be killed
        if [ "${TTIME}" -gt "${MAXTIME}" ]; then
            kill ${1} "${pid}"
        fi
    done
}

# Leave a chance to kill processes properly (SIGTERM)
killpids "-15"
sleep 5

# Now kill remaining processes (SIGKILL)
killpids "-9"

猜你在找的Bash相关文章