function process(){ currPs=$(ps -ef | awk '{if(FNR==1) {print $2, $5, $7, $8, "ETIME"} else if (($1!~/root/) && (!a[$2""$8]++)) {print $2, $5, $7, $8, "1"}}') echo "$currPs">$currPsPath if [ "$lastPs" == "" ]; then lastPs=$currPs echo $(date)"\n""$currPs">$filePath echo "$lastPs">$lastPsPath else runningPs=$(awk 'NR==FNR{a[$1,$4];next}{if(($1,$4) in a){print $1, $2, $3, $4, $5}else{print $1, $2, $3, $4, $5}}' "$lastPsPath" "$currPsPath") zombiePs=$(awk -v etime="$(date "+%Y-%m-%d %H:%M:%S")" 'NR==FNR{a[$1,$4]; next}{if(!(($1, $4) in a)){print $1, $2, $3, $4, $5=etime}}' "$currPsPath" "$lastPsPath") currPs=$runningPs$zombiePs lastPs=$currPs # echo "$zombiePs" # echo currPs>currPsPath echo $(date)"\n""$currPs">$filePath echo "$lastPs">$lastPsPath fi }
时间: 2024-04-23 13:28:09 浏览: 132
分享awk变量$0的妙用
这段代码定义了一个名为 `process()` 的函数,用于处理进程相关的信息。函数中的代码逻辑如下:
1. 首先,通过 `ps -ef` 命令获取当前进程的信息,并使用 `awk` 进行处理,将结果保存到变量 `currPs` 中:
```shell
currPs=$(ps -ef | awk '{if(FNR==1) {print $2, $5, $7, $8, "ETIME"} else if (($1!~/root/) && (!a[$2""$8]++)) {print $2, $5, $7, $8, "1"}}')
```
2. 将 `currPs` 的内容保存到文件 `$currPsPath` 中:
```shell
echo "$currPs">$currPsPath
```
3. 检查变量 `lastPs` 是否为空,如果为空,则将 `lastPs` 赋值为 `currPs`,并将当前日期和 `currPs` 的内容保存到文件 `$filePath` 中,并将 `lastPs` 的内容保存到文件 `$lastPsPath` 中:
```shell
if [ "$lastPs" == "" ]; then
lastPs=$currPs
echo $(date)"\n""$currPs">$filePath
echo "$lastPs">$lastPsPath
```
4. 如果 `lastPs` 不为空,则将 `lastPs` 和 `currPs` 进行比对,提取出正在运行和僵尸进程,并将它们的信息保存到变量 `runningPs` 和 `zombiePs` 中。然后,将 `runningPs` 和 `zombiePs` 连接起来赋值给 `currPs`,更新 `lastPs` 的值,并将当前日期和 `currPs` 的内容保存到文件 `$filePath` 中,并将 `lastPs` 的内容保存到文件 `$lastPsPath` 中:
```shell
else
runningPs=$(awk 'NR==FNR{a[$1,$4];next}{if(($1,$4) in a){print $1, $2, $3, $4, $5}else{print $1, $2, $3, $4, $5}}' "$lastPsPath" "$currPsPath")
zombiePs=$(awk -v etime="$(date "+%Y-%m-%d %H:%M:%S")" 'NR==FNR{a[$1,$4]; next}{if(!(($1, $4) in a)){print $1, $2, $3, $4, $5=etime}}' "$currPsPath" "$lastPsPath")
currPs=$runningPs$zombiePs
lastPs=$currPs
echo $(date)"\n""$currPs">$filePath
echo "$lastPs">$lastPsPath
fi
```
这段代码中使用到的变量包括 `currPsPath`、`lastPsPath` 和 `filePath`,在实际使用时需要将它们替换为具体的路径。
阅读全文