완료될 때까지 "watch"를 "top" 로깅과 통합 - 어떻게?

완료될 때까지 "watch"를 "top" 로깅과 통합 - 어떻게?

나는 우연히 이 링크를 발견했습니다:특정 문자열이 관찰될 때까지 명령의 출력을 "감시"한 다음 종료합니다.

프로세스의 PID를 알고 있습니다. top을 사용하여 "리소스 소비" 프로세스를 기록하고 싶습니다.

기본적으로 top -p PID -b >> LOGFILE.

"watch" 명령을 사용하여 5초마다 이 작업을 점진적으로 실행하고 싶습니다.

watch -n 5

독립/외부 프로그램에서 로그 파일에 "We Are Finished"를 추가하겠습니다.

"We are Finished" 시 watch/top의 로깅이 중단/종료되기를 원합니다. 따라서 grep현재 값뿐만 아니라 전체 로그 파일을 평가해야 합니다.

명령이 비차단 형식으로 실행되기를 원합니다. 아마도 " &" 로 끝날 수도 있습니다.

-d를 5로 설정하면 top과 watch가 동시에 생성되나요? ...

위의 링크에서 제안한 "-e" 옵션을 사용한 시도는 예상대로 작동하지 않습니다. PID와 LOGFILE은 적절한 값입니다.

watch -n 5 -e "!  top -d 5 -b -p PID >> LOGFILE | grep -m 1 \"We Are Finished\"" &

답변1

until grep -qm 1 '\"We Are Finished\"' LOGFILE; do top -d 5 -n 12 -b -p PID >> LOGFILE; done

pid가 더 이상 실행되지 않을 때 프로세스에서 로깅을 종료하려면 아래 스크립트가 작동해야 합니까? (이렇게 하면 두 프로세스가 동일한 파일에 쓰는 것을 방지할 수 있습니까?)

PID, LOGFILE 위치, 로그 항목 사이의 시간 등 세 가지 매개변수를 사용합니다.


#!/bin/bash

if [ $# -lt 3 ]
  then
    echo "Usage logpid (PID) (LOGFILE) (Time between in sec)"
    exit 1;
fi

while :
    do 
    if  ps -p $1 > /dev/null ; then
    top -n 1 -b -p $1 >> $2;
    else
    echo "Exited No pid";
    break;
    fi
    sleep $3;   
done

관련 정보