KILLプロセス、プロセス名と時間を入力してください。

KILLプロセス、プロセス名と時間を入力してください。

指定された時間以上実行された場合は、指定されたプロセスを終了して終了する前に、プロセス情報を取得するシェルスクリプトを作成しようとします。

注:スクリプトはプロセス名と時刻を入力として使用する必要があります。これまでに試したことは次のとおりです。

#!/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ために必要ではないので、に変更するだけです。PIDawk '{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意味を確認する必要があります。TIMEps
  • 次のコード行がどのように機能するかを理解してください。

    ps -eo time,pid --no-headers | awk -F '[ :]*' '$1>0 || $2>0 {print $4}' | xargs kill
    

おすすめ記事