2010-12-12 3 views
13

क्या कोई लंबे समय से चलने वाले कमांड को लॉन्च करने के लिए कोई bash/linux कमांड है, फिर इसे मिनटों के बाद मार दें? मुझे लगता है कि मैं कांटा और मारने का उपयोग कर पर्ल के साथ कुछ हैक कर सकता हूं, लेकिन क्या किसी को पहले से बाहर कुछ पता है?bash: n मिनट के लिए कमांड चलाएं, फिर इसे

उत्तर

28

अधिकांश जीएनयू/लिनक्स डिस्ट्रोज़ में अब timeout कमांड देखें।

timeout -sHUP 10m command 

ही कार्यक्षमता http://www.pixelbeat.org/scripts/timeout

+0

यह वही है जो मैं ढूंढ रहा था! –

17

इसे इस के साथ आज़माएं, यह पृष्ठभूमि में आपका आदेश शुरू करता है, इसकी पीआईडी ​​$ पी में स्टोर करता है, कुछ समय तक प्रतीक्षा करता है और इसे SIGHUP से मारता है।

yourCommand & PID=$! 
sleep ${someMinutes}m 
kill -HUP $PID 

चीयर्स

पुनश्च: यह है कि एक नींद कि एनएम (मिनट) के बारे में जानता हो जाती है, और, आप कुछ गणित :)

+0

+1 और 'नींद $ के साथ प्राप्त किया जा सकता है ((मिनट * 60))' :) – khachik

+0

Khachik, कि शिक्षित पाठक के लिए व्यायाम था;) –

+0

धन्यवाद! यह अनिवार्य रूप से पर्ल मैंने अभी लिखा है, लेकिन इसे एक शेल मुहावरे के रूप में देखना अच्छा लगता है। मुझे अभी भी एक प्री-बिल्ट स्क्रिप्ट पसंद है, अगर किसी को किसी के बारे में पता है, लेकिन मैं इसे उत्तर के रूप में स्वीकार करूंगा। –

10
n=5 
some_command & 
pid=$! 
at now + $n minutes <<<"kill -HUP $pid" 

से अधिक at उपयोग करने का लाभ क्या करना चाहते हो सकता है sleep के लिए प्रतीक्षा कर रहा है कि आपकी स्क्रिप्ट नींद की अवधि समाप्त होने की प्रतीक्षा कर रही है। आप जा सकते हैं और अन्य चीजें कर सकते हैं और at निर्दिष्ट समय पर असीमित रूप से आग लगेंगे। आपकी स्क्रिप्ट के आधार पर यह एक बहुत ही महत्वपूर्ण विशेषता हो सकती है।

+0

मैंने इस +1 को एसिंक फीचर के लिए दिया है, हालांकि अवरोध करना मेरे मन में था। –