Linux

如何在ps -p中將時間格式更改為秒?

  • July 27, 2020

我寫了一個 rsync 腳本,它還檢查腳本的程序已經執行了多長時間。

這是相關部分:

time=$(ps -p $processid -o etime= | awk -F: '{print $2}') # number of seconds the process is running.

if [ $(ps -ef | grep $(basename $0) &>/dev/null && echo $?) -eq "0" ] && [ "$time" -gt "5" ]; then # Check if there's a running process with the script name which is running for more than 5 seconds.
       echo "$message"
       print_log $message
       print_log "--------- END --------"
       exit 1
fi

有時程序會卡住並執行超過 5 秒(甚至幾天),因此腳本的上述部分應該將其寫入日誌。

執行時:

ps -p PID -o etime=

它返回程序執行了多長時間。例子:

43:36

但是如果程序已經執行了一天以上,那麼輸出看起來像這樣:

[root@do01 ~]# ps -p 28518 -o etime=
7-22:43:36

我的問題是如何在幾秒鐘內得到這個數字?因為我需要確保程序沒有執行超過 5 秒。

您可以嘗試以下方法:

time=$(ps -p $processid -o etime= | tr -d ' ');
time_in_seconds=$(case ${#time} in "8") echo ${time: -2}+${time: -5:2}*60+${time: -8:2}*3600 | bc;;  "5")  echo ${time: -2}+${time: -5:2}*60 | bc;; *) echo $(echo $time | cut -d'-' -f1)*86400+${time: -2}+${time: -5:2}*60+${time: -8:2}*3600 | bc;; esac)
echo $time_in_seconds

較新的版本有etimes選項,它以秒為單位返回時間。

這將在 Ubuntu 上以秒為單位提供輸出。它不適用於 RedHat。

ps -p PID -o etimes=

引用自:https://serverfault.com/questions/701190