ฉันมี:
sleep 210m && for i in $(seq 1 5); do echo -e '\a'; sleep 0.5; done
ทำงานเป็นตัวจับเวลาแบบเรียบง่ายไม่สะดุดเพื่อเตือนฉันเมื่อมีบางสิ่งที่ควรทำ นั่นsleep 210m
คือ PID 25347
ฉันพยายามที่จะคิดออกว่าเวลาที่เหลืออยู่ในการนอนหลับ สิ่งที่ดีที่สุดที่ฉันจะได้รับด้วยการนอนในระยะเวลาเดิม (210 นาที) คือ:
$ echo "210 60 * $(ps -o etimes= 25347) - 60 ~ r n [:] P p" | dc
78:11
(คำอธิบาย: บิตแรกคำนวณจำนวนวินาทีในโหมดสลีปดั้งเดิม $(ps…)
บิตจะได้รับเวลานับตั้งแต่โหมดสลีปเริ่มต้นในไม่กี่วินาทีจากนั้นส่วนที่เหลือจะลบออกและแสดงในนาทีและวินาที)
มันเกิดขึ้นกับฉันนี่จะเป็นประโยชน์โดยทั่วไป มีวิธีที่ดีกว่าในการทำเช่นนี้? หรืออย่างน้อยก็เป็นวิธีที่ฉลาดในการแยกวิเคราะห์เวลาการนอนหลับจากps -o args
?
exec
อยู่เท่านั้น แต่นั่นเป็นจุดที่ดีสำหรับการแก้ปัญหาทั่วไป
mksh
และksh93
อย่างน้อย) ที่มีsleep
อยู่แล้วภายใน (ดังนั้นจะไม่แสดงในps
) คุณต้องทราบล่วงหน้าว่าsleep
การใช้งานใดที่คุณต้องเผชิญ
sh -c 'sleep 1; sleep 2'
จำนวนมากsh
เป็นกระบวนการเดียวกับที่เรียกใช้งานsh
และดำเนินการในภายหลังsleep 2
(1 วินาทีต่อมา)