ฉันมี:
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 วินาทีต่อมา)