คุณอาจพิจารณาสร้างแอปพลิเคชัน Stay-Open Applescript ที่ตั้งค่า / รีเซ็ตตัวจับเวลาพักเครื่องโดยพิจารณาจากกระบวนการที่กำลังทำงานอยู่ การสร้าง Plist Plist เป็นโซลูชันที่ทำงานได้ แต่ฉันยังคงสั่นคลอนในไวยากรณ์ คำสั่ง "pmset force sleep X" ไม่ต้องการการเข้าถึงรูท แต่การตั้งค่าจะถูกรีเซ็ตเมื่อรีบูต
เนื่องจากสถานการณ์ของคุณดูเหมือนว่าฉันจะไม่สามารถคาดการณ์ความต้องการของคุณได้ทั้งหมดฉันจะร่างบางสิ่งออกมาสำหรับคุณ
property LoopTime: 5 --measured in seconds
property normalSleepTimeout: 30 --measured in minutes
property processName: "rsync" --the name of the process you're trying to find
on run
do shell script "pmset force sleep 0" --disables sleep
idle()
end
on idle
if not appIsRunning() then
do shell script ("pmset force sleep " & normalSleepTimeout as string) -- sets sleep to desired idle timeout
quit
end
return
end
on appIsRunning()
--Here's where you need to do the test that an app is running. True needs to mean "the app is running". Store the value to "result" or change the below return statement.
return result
end
สำหรับสิ่งต่าง ๆ เช่นกระบวนการ rsync และพื้นหลังคุณจะต้องได้รับฟังก์ชั่นที่ชาญฉลาดและโพลเช่น $ top
set result to False
if 0 < (count of (do shell script ("top -l 1 | grep" & processName as string))) then
set result to True
end
โปรดสังเกตว่าในกรณีข้างต้นการค้นหาเพียง "rsync" จะคืนค่าเป็นบวกหาก rsyncd กำลังทำงานอยู่เพราะทั้งคู่ "rsync" และ "rsyncd" ตรงกัน คุณอาจต้องใช้เล่ห์เหลี่ยมมากขึ้นถ้ามันไม่ได้ผลสำหรับคุณ
หากแอปพลิเคชันเป็นกระบวนการแบบเรียงซ้อนฉันจะใช้สิ่งต่อไปนี้เพื่อพิจารณาว่ากำลังทำงานอยู่:
tell application "System Events" to set RunningAppNames to name of processes
หรือสำหรับตัวระบุบันเดิล (แม่นยำยิ่งขึ้น)
tell application "System Events" to set RunningBundles to bundle identifier of processes
บอกฉันเพิ่มเติมเกี่ยวกับสถานการณ์ของคุณและฉันจะพยายามเขียนสิ่งที่แน่นอนยิ่งขึ้นและด้วยส่วนต่อประสานผู้ใช้ที่ยืดหยุ่นมากขึ้น