加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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

发布时间:2020-12-15 18:53:31 所属栏目:安全 来源:网络整理
导读:我使用crontask来定期运行Rscript.不幸的是,我需要在一小部分aws中执行此操作,并且进程可能会挂起,从而建立越来越多的进程,直到整个系统滞后. 我想写一个crontask来杀死持续时间超过一分钟的所有R进程.我想出了 if [[ "$(uname)" = "Linux" ]];then killall
我使用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"

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读