예를 들어 웹사이트 기능 테스트와 같은 긴 명령을 실행하는 경우 다음과 같은 명령이 있습니까?
elapsed npm test
이는 npm test
여러 가지 명령을 포함할 수 있는 프로세스 또는 셸 스크립트이며 최대 45분이 소요될 수 있습니다. 실행되는 동안 1분마다 또는 5분마다 "22분 경과"를 출력할 수 있으면 좋을 것 같습니다.
이 명령은 time
소요된 총 시간을 표시할 수 있지만 도중에 경과된 시간은 표시할 수 없습니다.
답변1
당신이 사용할 수있는 pv -t
:
npm test | pv -t
또는 출력 통과를 방지하려면 npm
쓰기가 아닌 pv
fd를 사용하십시오.npm
{ npm test 3>&1 >&4 4>&- | pv -t; } 4>&1
답변2
백그라운드에서 이 명령을 시작하고 1분마다 소비된 CPU 시간을 폴링합니다.
npm test &
while sleep 1m
do
ps -o etime $!
done
답변3
~을 따라l0b0의 답변: 작업을 백그라운드에 두고 "아직 실행 중입니까?"라는 질문을 중심으로 바쁜 루프를 실행하고 경과된 시간을 표시합니다.
과거
#!/bin/sh
start=$(date +%s)
"$@" &
while ps -p $! > /dev/null
do
sleep 1
now=$(date +%s)
if [ $(( (now - start) % 60)) -eq 0 ]
then
printf "%d minutes have elapsed\n" $(( (now - start) / 60))
fi
done
프로세스가 종료되고 잠자는 동안 다른 프로세스가 시작되면 다른 프로세스가 백그라운드 프로세스와 동일한 PID를 재사용할 위험이 발생합니다.
1분마다 경과 시간(분) 보고5매분 대신에 첫 번째 분만 변경하세요.60에300.