ฉันต้องการที่จะรู้ว่าเมื่อกระบวนการทำงานจะยุติลง ฉันจะดูมันได้อย่างไร


14

ฉันต้องการทราบคำสั่งใด ๆ ที่ฉันสามารถเรียกใช้เพื่อทราบเวลาสิ้นสุดของกระบวนการ

ฉันได้เปิดตัวกระบวนการและรู้ว่า PID ของมัน แต่ฉันต้องการที่จะรู้ว่ามีคำสั่งใด ๆ ที่สามารถบอกฉันในเวลาที่มันสิ้นสุด

ขอบคุณสำหรับความช่วยเหลือของคุณ.


7
คำถามที่น่าสนใจ อย่างไรก็ตามในครั้งต่อไปที่คุณเรียกใช้คำสั่งที่ใช้เวลานานในการพิจารณาการใช้at(ดู manpage นี้: man at) สิ่งนี้จะจัดคิวไว้เป็นงานคุณจะได้รับการแจ้งเตือนเมื่อเสร็จแล้ว ฯลฯ มันเรียบง่ายเหมือน Cron แต่สำหรับงานนัดเดียว
gertvdijk

คำตอบ:


11

เรียกใช้สิ่งนี้:

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

หรือคุณสามารถสร้างสคริปต์ทุบตี 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 ...เป็นแบบพกพามากขึ้น - มันจะทำงานบนระบบที่ไม่ใช่ลินุกซ์ด้วย และไม่มีเหตุผลที่จะใช้ bash - รหัสของคุณไม่ได้ใช้ bashisms ใด ๆ ดังนั้น/bin/shจะดีอย่างสมบูรณ์ที่นี่
Richard Hansen

1
@RichardHansen ไซต์นี้เกี่ยวกับ Ubuntu นี่ไม่ใช่ StackOverflow
hytromo

@ RichardHansen ขอบคุณสำหรับkill -0ฉันคิดว่ามันเป็นทางออกที่สง่างามมากขึ้น
Eric Carvalho

@ Hakermania: ฉันเข้าใจซึ่งเป็นเหตุผลที่ฉันยังให้ +1 ฉันเพิ่งชี้ให้เห็นสองวิธีในการทำให้สคริปต์พกพาได้มากขึ้นในกรณีที่มีคนต้องการทำสิ่งเดียวกันบน BSD / Solaris / etc ระบบ. ฉันเชื่อว่าเป็นความคิดที่ดีที่จะยึดติดกับPOSIXเว้นแต่จะมีเหตุผลที่จะทำบางสิ่งที่เฉพาะเจาะจงกับ Ubuntu ในกรณีนี้ไม่มีเหตุผลที่จะไม่เขียนสคริปต์ที่สอดคล้องกับ 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.