#!/bin/sh
ALTER="1153"
NAME="aio"
for i in $(ps -eo pid,etime,comm | \
awk -v alt="$ALTER" -v name="$NAME" '$2~/[^0-alt]-/ && $3~/name/{print$1} ');
do
echo $i
done
答え1
使用する必要はありませんアッ:
for pr in $(pgrep $NAME); do
elapse=$(ps -o etime= -p $pr)
[ "${elapse%-*}" -gt "$ALTER" ] && echo $pr
done
または、スティーブン・チャジェラス'コメント
ps -C $NAME -o pid=,etime= | awk '$2 + 0 > a && /-/ {print $1}' a="$ALTER"
答え2
これを使用してください:
awk -v alt="$ALTER" -v name="$NAME" '
$2 ~ /-/ && $2 >= alt && $3 ~ name{print $1}' file
$2 ~ /-/
:曜日が含まれていることを確認してください。$2 >= alt
:日数がetime
大きいことを確認してください$ALTER
。$3 ~ name
:3番目のフィールドでname
()値を取得します。$NAME
もう一つの純粋なbash
解決策:
ps -eo pid,etime,comm | while read p e n; do
if [[ $n =~ $NAME ]] && [[ $e =~ \- ]] && [ "${e%%-*}" -gt "$ALTER" ]; then
echo $p
fi
done
while read p e n
pid、etime、およびコマンド名を変数およびに$p
保存$e
します$n
。[[ $n =~ $NAME ]]
:コマンド$NAME
に内容があることを確認してください。[[ $e =~ \- ]]
:etimeにダッシュ(-)があることを確認する(プロセスが1日以上実行されたことを示す)[ "${e%%-*}" -ge "$ALTER" ]
:etimeの日数カウンタが次の値以上であることを確認してください。$ALTER
- 上記の条件がすべて満たされたら、pidを印刷します。
echo $p