ฉันต้องการทราบคำสั่งใด ๆ ที่ฉันสามารถเรียกใช้เพื่อทราบเวลาสิ้นสุดของกระบวนการ
ฉันได้เปิดตัวกระบวนการและรู้ว่า PID ของมัน แต่ฉันต้องการที่จะรู้ว่ามีคำสั่งใด ๆ ที่สามารถบอกฉันในเวลาที่มันสิ้นสุด
ขอบคุณสำหรับความช่วยเหลือของคุณ.
ฉันต้องการทราบคำสั่งใด ๆ ที่ฉันสามารถเรียกใช้เพื่อทราบเวลาสิ้นสุดของกระบวนการ
ฉันได้เปิดตัวกระบวนการและรู้ว่า PID ของมัน แต่ฉันต้องการที่จะรู้ว่ามีคำสั่งใด ๆ ที่สามารถบอกฉันในเวลาที่มันสิ้นสุด
ขอบคุณสำหรับความช่วยเหลือของคุณ.
คำตอบ:
เรียกใช้สิ่งนี้:
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
จะดีอย่างสมบูรณ์ที่นี่
kill -0
ฉันคิดว่ามันเป็นทางออกที่สง่างามมากขึ้น
หากคุณต้องการหลีกเลี่ยงการชน 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)"
บางทีคำสั่งที่time
เหมาะกับความต้องการของคุณ:
time [options] command [arguments...]
ตัวอย่าง:
time /local/usr/bin/myProcess arg1 arg2
เมื่อกระบวนการเสร็จสิ้นtime
จะแสดงสถิติบางอย่างเช่นเวลาที่ใช้ในการดำเนินการให้เสร็จสมบูรณ์ (เป็นวินาทีที่ฉันคิดว่า)
time
ไม่ใช่ตัวเลือก
at
(ดู manpage นี้:man at
) สิ่งนี้จะจัดคิวไว้เป็นงานคุณจะได้รับการแจ้งเตือนเมื่อเสร็จแล้ว ฯลฯ มันเรียบง่ายเหมือน Cron แต่สำหรับงานนัดเดียว