保存变量与进程打开的时间

时间:2015-01-14 15:10:14

标签: linux bash awk

我需要一个脚本来关闭一些已经打开太久的程序。我无法将进程打开的时间(以秒为单位)保存到变量中。冲突的一行是:

SECONDS_OPENED=$(ps -p $pid -o etime=) | awk -F: '{ print ($1 * 3600) + ($2 * 60) + $3  }' ;

或下面看起来相似的那个。如果我把:

echo $(ps -p $pid -o etime=) | awk -F: '{ print ($1 * 3600) + ($2 * 60) + $3  }' ; 

打印正确。我不知道为什么,在第一种情况下,我不知道为什么,SECONDS_OPENED仍然是空的。

相关代码如下。如果我可以添加任何内容,请告诉我。

TIME_OPENED=$(ps -p $PID -o etime=) ;
SECONDS=$TIME_OPENED | awk -F: '{ print $3 }' ;
if [[ "$SECONDS" != "" ]] ;
then 
SECONDS_OPENED=$(ps -p $pid -o etime=) | awk -F: '{ print ($1 * 3600) + ($2 * 60) + $3  }' ;
else 
SECONDS_OPENED=$(ps -p $pid -o etime=) | awk -F: '{ print ($1 * 60) + $2  }' ;

1 个答案:

答案 0 :(得分:1)

你写的是:

SECONDS_OPENED=$(ps -p $pid -o etime=) | awk -F: '{ print ($1 * 3600) + ($2 * 60) + $3  }' ;
                ^____________________^ ^
                                       this becomes orphan

这样命令就只是部分执行了。

要存储所有命令ps -p ... | awk '...',只需将所有内容包装在$()表达式中:

SECONDS_OPENED=$(ps -p $pid -o etime= | awk -F: '{ print ...  }')
                ^_______________________________________________^