指定された時間以上実行された場合は、指定されたプロセスを終了して終了する前に、プロセス情報を取得するシェルスクリプトを作成しようとします。
注:スクリプトはプロセス名と時刻を入力として使用する必要があります。これまでに試したことは次のとおりです。
#!/bin/sh
ps -eaf |
awk '{print $7, $8}' |
sort -n |
grep -v TIME |
grep -v 00:00:00 |
awk -F ":" '{if ( $2 >= 01 ) print}'
o / pは次のように印刷します。
00:08:15 /usr/bin/dockerd
00:17:41 /usr/bin/kubelet
ここでブロックされます... 01分より古いプロセスを終了する必要があるため、スクリプト入力をプロセス名と時刻として使用して上記のプロセスを終了する必要があります。
ベストアンサー1
IMHO あなたは行き詰まった路地に達し、このようにやりたいことはできません。
問題は、スクリプトの実行中にTIME
プロセス属性が変更された可能性があるため、情報が最新ではないことです。TIME
カップルはTIME
コースCMD
を確認できません。
なぜこれをしましたかawk '{print $7, $8}'
?この時点では、プロセスを識別するCMD
ために必要ではないので、に変更するだけです。PID
awk '{print $7, $2}'
PID
検索しているプロセスのsを印刷するには、次のようにコードを変更できます。
ps -eaf \
| awk '{print $7, $2}' \
| sort -n \
| grep -v TIME \
| grep -v 00:00:00 \
| awk -F ":" '{if ( $2 >= 01 ) print}' \
| awk '{print $2}'
また、コードに微妙なエラーがあります。04:00:23
プロセスに次のエラーがあるとどうなりますかTIME
?あなたのコードは確認するだけなのでスキップします。分フィールドが存在しますTIME
。次のように変更できます。
ps -eaf \
| awk '{print $7, $2}' \
| sort -n \
| grep -v TIME \
| grep -v 00:00:00 \
| awk -F ":" '{if (( $1 >= 01 ) || ( $2 >= 01 )) print}' \
| awk '{print $2}'
技術を向上させるためのいくつかのヒント:
-o
オプションps
、-F
オプション、および列のawk
意味を確認する必要があります。TIME
ps
次のコード行がどのように機能するかを理解してください。
ps -eo time,pid --no-headers | awk -F '[ :]*' '$1>0 || $2>0 {print $4}' | xargs kill