2012-04-19 9 views
95

संभव डुप्लिकेट:
Bash script that kills a child process after a given timeoutबैश में टाइमआउट के साथ प्रक्रिया कैसे चलाएं?

वहाँ एक रास्ता एक खोल स्क्रिप्ट है कि 15 सेकंड के लिए एक निश्चित आदेश पर अमल होगा, तो आदेश को मारने लिखने के लिए है?

मैंने सोने, प्रतीक्षा और पिंग करने की कोशिश की है, लेकिन शायद मैं उन्हें गलत इस्तेमाल कर रहा हूं।

+2

आमतौर पर आप एक अलार्म सिग्नल का उपयोग करते हैं और इसे फँसते हैं। लेकिन कमांड उपयोगिता [timelimit] (http://devel.ringlet.net/sysutils/timelimit/) आशाजनक लगती है। – Konerak

+0

जो इसे ऑफटॉपिक के रूप में वोट देते हैं? :/ –

उत्तर

43

आप प्रक्रिया को पृष्ठभूमि कर सकते हैं, और इसकी पीआईडी ​​$! में जाती है। फिर सो और मारने:

some_command some_arg1 some_arg2 & 
TASK_PID=$! 
sleep 15 
kill $TASK_PID 

this URL पर मुझे लगता है कि वहाँ का उल्लेख किया जाता है, यह ऐसा करने के लिए एक से अधिक समाधान।

timeout 15s command 

नोट::

+3

मैंने शुरुआत में अपना जवाब हटा दिया (क्योंकि, स्पष्ट रूप से, करॉली बहुत अधिक भयानक है), लेकिन ऐसा लगता है कि कुछ लोगों के पास 'टाइमआउट' => अवांछित नहीं है। – ArjunShankar

190

timeout आदेश का उपयोग करें कुछ सिस्टम आप दूसरों पर यह नहीं हैं या वे अलग आदेश पंक्ति तर्क है है coreutils स्थापित करने की आवश्यकता, पर। @ अर्जुनशंकर द्वारा पोस्ट किया गया एक वैकल्पिक समाधान देखें। इसके आधार पर आप उस बॉयलर-प्लेट कोड को समाहित कर सकते हैं और अपना खुद का पोर्टेबल timeout स्क्रिप्ट या छोटा सी ऐप बना सकते हैं जो वही काम करता है।

+3

यह उल्लेख करने के लिए नहीं है कि अगर आदेश पहले –

+0

समाप्त हो गया है तो यह तत्काल वापस आ जाएगा, इसलिए कमांड के लिए मैं 15 सेकंड के बाद मारने की कोशिश कर रहा हूं, मैंने इस कमांड का उपयोग करने का प्रयास किया है, लेकिन यह आदेश चलाने से नहीं रोकता है, मैंने टाइमआउट - के 15 का उपयोग करने का भी प्रयास किया है और यह भी काम नहीं किया :( – AlanF

+0

यह है कि आप ** ** ** आदेश कैसे चलाते हैं। –

संबंधित मुद्दे