मैं जानना चाहता हूं कि एक रनिंग प्रक्रिया कब समाप्त होगी। मैं इसे कैसे देख सकता हूं?


14

मैं किसी भी आदेश को जानना चाहूंगा जिसे मैं किसी प्रक्रिया के अंतिम समय को जानने के लिए चला सकता हूं।

मैंने पहले ही इस प्रक्रिया को शुरू कर दिया है और इसकी पीआईडी ​​को जानता हूं, लेकिन मैं जानना चाहता हूं कि क्या कोई आदेश है जो मुझे बता सकता है कि यह किस समय समाप्त हुआ।

आपकी सहायता के लिए धन्यवाद।


7
दिलचस्प सवाल। वैसे भी, अगली बार जब आप एक कमांड चलाते हैं, जिसमें लंबा समय लगता है, तो उपयोग करने पर विचार करें at(मैनपेज देखें:) man at। यह इसे एक नौकरी के रूप में पंक्तिबद्ध करेगा, जब आप इसे समाप्त कर लेंगे, आदि के बारे में सूचित किया जाएगा। यह बहुत ही बुनियादी है, क्रोन-जैसे, लेकिन नौकरियों के एकल शॉट्स के लिए।
gertvdijk

जवाबों:


11

इसे चलाओ:

while kill -0 <PID>; do sleep 1; done; echo "Process finished at $(date +"%F %T")."

या आप बैश स्क्रिप्ट बना सकते हैं। wait-for-death.sh:

#!/bin/bash

if ! kill -0 $1; then
    echo "Process $1 doesn't exist."
    exit 1
fi

while kill -0 $1; do
    sleep 1
done

echo "Process $1 finished at $(date +"%F %T")."

फिर इसे निष्पादन की अनुमति दें:

chmod +x wait-for-death.sh

और यह प्रक्रिया 'PID:

./wait-for-death.sh <PID>

while kill -0 <pid>; do ...अधिक पोर्टेबल है - यह गैर-लिनक्स सिस्टम पर भी काम करेगा। और बैश का उपयोग करने का कोई कारण नहीं है - आपका कोड किसी भी बशीश का उपयोग नहीं करता है इसलिए /bin/shयहां पूरी तरह से ठीक है।
रिचर्ड हैंनन

1
@RichardHansen यह साइट Ubuntu के बारे में है, यह StackOverflow नहीं है।
hytromo

@ रिचर्डचैन के लिए धन्यवाद kill -0, मुझे लगता है कि यह एक अधिक सुंदर समाधान है।
एरिक कारवाल्हो

@ ठाकरमैन: मैं समझता हूं, यही वजह है कि मैंने इसे अभी भी +1 किया है। मैं बस स्क्रिप्ट को अधिक पोर्टेबल बनाने के लिए कुछ तरीकों की ओर इशारा कर रहा था, अगर कोई बीएसडी / सोलारिस / आदि पर एक ही काम करना चाहता था। प्रणाली। मेरा मानना ​​है कि जब तक कुछ उबंटू-विशिष्ट करने का कोई कारण नहीं है, तब तक पोसिक्स से चिपकना एक अच्छा विचार है । इस मामले में, POSIX-अनुरूप स्क्रिप्ट नहीं लिखने का कोई कारण नहीं है
रिचर्ड हैनसेन

2

यदि आप पीआईडी ​​टकराव से बचना चाहते हैं, तो आप इसका उपयोग कर सकते हैं at:

job_id=$(at now <<< 'sleep 10' 2>&1 | awk 'END {print $2}')
while at -l | grep -q "^${job_id}\s"
do
    sleep 1
done
echo "Process finished at $(date)"

0

हो सकता है कि कमांड timeआपकी जरूरत के अनुसार हो:

time [options] command [arguments...]

उदाहरण:

time /local/usr/bin/myProcess arg1 arg2

एक बार प्रक्रिया समाप्त होने के बाद प्रक्रिया पूरी होने में लगने timeवाले समय (सेकंड में मुझे लगता है) जैसे कुछ आंकड़े दिखाई देंगे।

मैन पेज की जाँच करें या इस ऑनलाइन मैन पेज पर एक नज़र डालें ।


ओपी ने कहा कि उन्होंने "पहले ही प्रक्रिया शुरू कर दी है", इसलिए timeकोई विकल्प नहीं है।
एरिक कारवाल्हो
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.