คำตอบสำหรับคำสั่งบรรทัดคำสั่งนี้เพื่อฆ่าคำสั่งโดยอัตโนมัติหลังจากระยะเวลาหนึ่ง
เสนอวิธี 1 บรรทัดเพื่อหมดเวลาคำสั่งที่รันเป็นเวลานานจากบรรทัดคำสั่ง bash:
( /path/to/slow command with options ) & sleep 5 ; kill $!
แต่เป็นไปได้ว่าคำสั่ง "ที่รันนาน" อาจเสร็จสิ้นเร็วกว่าการหมดเวลา (ลองเรียกมันว่าคำสั่ง "โดยปกติจะใช้เวลานาน แต่บางครั้งเร็ว" หรือคำสั่งtlrbsfเพื่อความสนุกสนาน)
ดังนั้นวิธีการ 1 ซับที่ดีนี้มีปัญหาสองสามอย่าง อย่างแรกsleep
คือไม่มีเงื่อนไขดังนั้นจึงกำหนดขอบเขตล่างที่ไม่พึงประสงค์ในเวลาที่ใช้เพื่อให้ลำดับเสร็จ พิจารณา 30s หรือ 2m หรือ 5m สำหรับการสลีปเมื่อคำสั่งtlrbsfเสร็จสิ้นใน 2 วินาที - ไม่พึงปรารถนาอย่างมาก ประการที่สองkill
คือไม่มีเงื่อนไขดังนั้นลำดับนี้จะพยายามฆ่ากระบวนการที่ไม่ทำงานและสะอื้นเกี่ยวกับมัน
ดังนั้น...
มีวิธีการหมดเวลาคำสั่งโดยทั่วไปยาว - วิ่ง - แต่ - บางครั้ง - เร็ว ( "tlrbsf" ) คำสั่งที่
- มีการดำเนินการทุบตี (คำถามอื่น ๆ แล้วมีคำตอบ Perl และ C)
- จะยุติการทำงานเมื่อสิ้นสุดโปรแกรมทั้งสอง: tlrbsfหรือหมดเวลาที่ผ่านไป
- จะไม่ฆ่ากระบวนการที่ไม่มีอยู่ / ไม่ทำงาน (หรือเป็นทางเลือก: จะไม่บ่นเกี่ยวกับการฆ่าที่ไม่ดี)
- ไม่จำเป็นต้องเป็น 1 ซับ
- สามารถทำงานภายใต้ Cygwin หรือ Linux
... และสำหรับคะแนนโบนัสให้รันคำสั่งtlrbsfในเบื้องหน้าและ 'โหมดสลีป' หรือกระบวนการพิเศษในพื้นหลังเช่นว่า stdin / stdout / stderr ของคำสั่งtlrbsfสามารถเปลี่ยนเส้นทางได้เหมือนกับว่ามันเป็น ทำงานโดยตรงหรือไม่
ถ้าเป็นเช่นนั้นโปรดแบ่งปันรหัสของคุณ ถ้าไม่ได้โปรดอธิบายว่าทำไม
ฉันใช้เวลาสักครู่ในการแฮ็คตัวอย่างที่กล่าวมาแล้ว แต่ฉันใช้ทักษะการทุบตีของฉันไม่ทัน
timeout
ยูทิลิตีgnu ?
timeout
ดีมาก! คุณสามารถใช้กับหลายคำสั่ง (สคริปต์หลายบรรทัด): stackoverflow.com/a/61888916/658497