실행중인 프로세스가 언제 종료되는지 알고 싶습니다. 어떻게 볼 수 있습니까?


14

프로세스의 종료 시간을 알기 위해 실행할 수있는 명령을 알고 싶습니다.

이미 프로세스를 시작하고 PID를 알고 있지만 종료 시점을 알려주는 명령이 있는지 알고 싶습니다.

당신의 도움을 주셔서 감사합니다.


7
흥미로운 질문입니다. 어쨌든 다음에 시간이 오래 걸리는 명령을 실행할 때는 사용을 고려 at하십시오 (맨 페이지 : 참조 man at). 이렇게하면 작업으로 대기열에 들어갑니다. 작업이 완료되면 알림을받습니다. 매우 기본적이며 Cron과 비슷하지만 한 번의 작업에 적합합니다.
gertvdijk

답변:


11

이것을 실행하십시오 :

while kill -0 <PID>; do sleep 1; done; echo "Process finished at $(date +"%F %T")."

또는 bash 스크립트를 만들 수 있습니다. wait-for-death.sh:

#!/bin/bash

if ! kill -0 $1; then
    echo "Process $1 doesn't exist."
    exit 1
fi

while kill -0 $1; do
    sleep 1
done

echo "Process $1 finished at $(date +"%F %T")."

그런 다음 실행 권한을 부여하십시오.

chmod +x wait-for-death.sh

프로세스의 PID를 전달하여 실행하십시오.

./wait-for-death.sh <PID>

while kill -0 <pid>; do ...이식성이 뛰어납니다-Linux 이외의 시스템에서도 작동합니다. bash를 사용할 이유가 없습니다. 코드는 bashism을 사용하지 않으므로 /bin/sh여기에서 완벽하게 좋습니다.
Richard Hansen

1
@RichardHansen이 사이트는 우분투에 관한 것이며, 이것은 OverOver가 아닙니다.
hytromo

@RichardHansen 감사합니다 kill -0. 더 우아한 솔루션이라고 생각합니다.
Eric Carvalho

@ hakermania : 이해합니다. 그래서 여전히 +1을주었습니다. 누군가가 BSD / Solaris 등에서 같은 일을하고 싶을 때 스크립트를 이식성이있게 만드는 몇 가지 방법을 지적했습니다. 체계. 우분투에 특정한 것을 할 이유가 없다면 POSIX 를 고수하는 것이 좋습니다 . 이 경우 POSIX 호환 스크립트를 작성 하지 않아도 됩니다.
Richard Hansen

2

PID 충돌을 피하려면 다음을 사용할 수 있습니다 at.

job_id=$(at now <<< 'sleep 10' 2>&1 | awk 'END {print $2}')
while at -l | grep -q "^${job_id}\s"
do
    sleep 1
done
echo "Process finished at $(date)"

0

어쩌면 그 명령 time은 당신의 필요에 맞을 것입니다 :

time [options] command [arguments...]

예:

time /local/usr/bin/myProcess arg1 arg2

프로세스가 완료되면 프로세스 완료 time시간 (초 단위)과 같은 일부 통계가 표시됩니다.

매뉴얼 페이지를 확인하거나이 온라인 매뉴얼 페이지를 살펴보십시오 .


OP는 "이미 프로세스를 시작했다"고 말했지만 time옵션은 아니다.
Eric Carvalho
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.