यह एक निश्चित समय के बाद एक कमांड को ऑटो-कमांड को कमांड लाइन कमांड का जवाब देता है
बैश कमांड लाइन से लंबे समय तक चलने वाले कमांड को टाइमआउट करने के लिए 1-लाइन विधि का प्रस्ताव करता है:
( /path/to/slow command with options ) & sleep 5 ; kill $!
लेकिन यह संभव है कि दिए गए "लंबे समय से चल रहे" आदेश समय समाप्त होने से पहले समाप्त हो सकते हैं। (आइए इसे "आम तौर पर लंबे समय से चलने वाले-लेकिन-कभी-कभी तेज" आदेश, या मनोरंजन के लिए tlrbsf कहते हैं।)
तो इस निफ्टी 1-लाइनर दृष्टिकोण में कुछ समस्याएं हैं। सबसे पहले, sleep
सशर्त नहीं है, ताकि अनुक्रम समाप्त करने के लिए उठाए गए समय पर एक अवांछनीय निचली सीमा निर्धारित हो। नींद के लिए 30 या 2 मी या 5 मी पर भी विचार करें, जब tlrbsf कमांड 2 सेकंड में खत्म होती है - अत्यधिक अवांछनीय। दूसरा, kill
बिना शर्त है, इसलिए यह अनुक्रम गैर-चलने वाली प्रक्रिया को मारने और इसके बारे में सचेत करने का प्रयास करेगा।
इसलिए...
क्या आम तौर पर लंबे समय से चलने वाले लेकिन कभी-कभी तेज ( "tlrbsf" ) कमांड को टाइमआउट करने का एक तरीका है:
- एक बैश कार्यान्वयन है (दूसरे प्रश्न में पहले से ही पर्ल और सी उत्तर हैं)
- दो में से पहले को समाप्त करेगा: tlrbsf प्रोग्राम समाप्ति, या समय समाप्त हो गया
- गैर-मौजूदा / गैर-चल रही प्रक्रियाओं को नहीं मारेंगे (या वैकल्पिक रूप से: एक बुरी हत्या के बारे में शिकायत नहीं करेंगे )
- 1-लाइनर होना जरूरी नहीं है
- Cygwin या Linux के अंतर्गत चला सकते हैं
... और, बोनस अंक के लिए, अग्रभूमि में tlrbsf कमांड चलाता है और पृष्ठभूमि में कोई भी 'नींद' या अतिरिक्त प्रक्रिया, जैसे कि tlrbsf कमांड के स्टड / stdout / stderr को पुनर्निर्देशित किया जा सकता है, जैसे कि यह किया गया था सीधे चला?
यदि हां, तो कृपया अपना कोड साझा करें। अगर नहीं, तो कृपया बताएं क्यों।
मैं थोड़ी देर के लिए aforementioned उदाहरण हैक करने की कोशिश कर रहा हूँ, लेकिन मैं अपने मार कौशल की सीमा मार रहा हूँ।
timeout
उपयोगिता का उपयोग नहीं करने का कोई कारण ?
timeout
महान है! आप कई कमांड (मल्टी-लाइन स्क्रिप्ट) के साथ भी उपयोग कर सकते हैं : stackoverflow.com/a/61888916/658497