Linux 查看进程运行的时间

昨晚上被同源机房的 rsync 问题搞的一晚上没睡好,今天好好修理修理它。

cat kill_rsync.sh

#!/bin/bash

# kill the rsync process
pids=`ps aux|grep rsync|grep -v check|grep -v kill|grep -v grep|grep -v  daemon|awk '{print $2}'`  
CRITICAL_TIME=600 # 10 mins


function show_time()  
{
        pid=$1
        jiffies=$(cat /proc/$pid/stat | cut -d" " -f22)
        sys_uptime=$(cat /proc/uptime | cut -d" " -f1)
        last_time=$(( ${sys_uptime%.*} - $jiffies/100 ))
        echo "the process $pid lasts for $last_time seconds."
}



for id in $pids  
do  
    show_time ${id}

    if [ "$last_time" -gt "$CRITICAL_TIME" ]; then
        echo "critical"
        kill $id
        rm -f /var/lock/rsync.lock
    else
        echo "OK"
        exit 0
    fi
done  

只要 rsync 传输进程超过了10分钟还没传完,我就直接干掉进程,等待下次重传。

下面这个函数主要是用来获取进程运行的时间

function show_time()  
{
        pid=$1
        jiffies=$(cat /proc/$pid/stat | cut -d" " -f22)
        sys_uptime=$(cat /proc/uptime | cut -d" " -f1)
        last_time=$(( ${sys_uptime%.*} - $jiffies/100 ))
        echo "the process $pid lasts for $last_time seconds."
}