मैं एक टर्मिनल प्रक्रिया के निष्पादन समय को कैसे माप सकता हूं?


160

मैं एक प्रक्रिया के निष्पादन समय को मापने की कोशिश कर रहा हूं जिसे मैं कमांड लाइन के माध्यम से कॉल करता हूं (यानी, मैं यह पता लगाना चाहता हूं कि इस प्रक्रिया को समाप्त होने में कितना समय लगता है)। क्या कोई कमांड है जिसे मैं कमांड को जोड़ सकता हूं जो इस प्रक्रिया को बुलाएगा जो इसे प्राप्त करेगा?

जवाबों:


197

timeउस कमांड से पहले जोड़ें जिसे आप मापना चाहते हैं। उदाहरण के लिए time ls:।

आउटपुट जैसा दिखेगा:

real    0m0.606s
user    0m0.000s
sys     0m0.002s

पर स्पष्टीकरण real, userऔर sys(से man time):

  • real: प्रक्रिया द्वारा उपयोग किए गए वास्तविक (दीवार घड़ी) समय, सेकंड में।
  • user: सीपीयू-सेकंड की कुल संख्या जो प्रक्रिया सीधे (उपयोगकर्ता मोड में), सेकंड में उपयोग की जाती है।
  • sys: प्रक्रिया की ओर से सिस्टम द्वारा उपयोग किए गए CPU-सेकंड की कुल संख्या (कर्नेल मोड में), सेकंड में।

1
@ninjalj, तो आप के बारे में अधिक जानकारी प्रदान कर सकते क्या real, userहै, और sysबार है कि इस आदेश का रिटर्न कर रहे हैं?
क्रिस्टोफर काइल हॉर्टन

2
@JacobVlijm यह उत्तर विस्तृत नहीं है। :) आप अपनी टिप्पणी में संपादित कर सकते हैं और ऐसा कर सकते हैं।
मूरू

1
ध्यान दें कि आपको आवश्यकता हो सकती है sudo apt-get install timeयदि आप एक शेल का उपयोग कर रहे हैं जहां timeएक बिलिन नहीं है।
poolie

1
ध्यान दें कि यह बैश के timeबिलिन से आउटपुट है , लेकिन man timeएक निष्पादन योग्य (जैसे /usr/bin/time, timeपैकेज से) होगा, और इसका आउटपुट अलग दिखेगा। बाश में भी, आप help timeबिलिन के साथ मदद के लिए दौड़ सकते हैं ।
वेजेंड्रिया

ध्यान दें कि प्रक्रिया समाप्त होने का मतलब यह नहीं है कि सभी काम समाप्त हो गए हैं। सिस्टम समय बफ़र के लिए "समय" रिटर्न के बाद एक प्रति अतिरिक्त मिनट लग सकता है (असंबद्ध sys समय के साथ भी)।
ubfan1

43

एक लाइन-बाय-लाइन डेल्टा माप के लिए, सूक्ति का प्रयास करें ।

यह एक कमांड लाइन उपयोगिता है, थोडा और अधिक टीटीएस की तरह, टाइमस्टैम्प की जानकारी को दूसरे कमांड के मानक आउटपुट में प्रस्तुत करने के लिए। लंबे समय तक चलने वाली प्रक्रियाओं के लिए उपयोगी जहाँ आप इतना लंबा समय ले रहे हैं का एक ऐतिहासिक रिकॉर्ड चाहते हैं।

सूक्ति के लिए किसी भी चीज को डालना प्रत्येक रेखा के लिए टाइमस्टैम्प को दर्शाएगा, यह दर्शाता है कि बफर में अंतिम पंक्ति कितनी लंबी थी - यानी अगली पंक्ति को प्रदर्शित होने में कितना समय लगा। डिफ़ॉल्ट रूप से, सूक्ति प्रत्येक रेखा के बीच बीता हुआ सेकंड प्रदर्शित करेगा, लेकिन यह विन्यास योग्य है।

सूक्ति प्रदर्शन


2
यह बहुत चालाक है।
नाथन आर्थर

1
(लिंक में टाइपो, सौभाग्य से URL ठीक है)। sudo npm i gnomon -gयदि आपके पास है तो आप इसे स्थापित कर सकते हैं npm। यह निश्चित नहीं है कि यह "प्रगति" (उसी लाइन पर रहना) का उपयोग करके "प्रगति" लाइनों के खिलाफ कितना अच्छा करता है: उस स्थिति में मैं इसे सभी को एक लंबी रेखा के रूप में गिनता हूं, अलग-अलग नहीं।
टॉमस गैंडर

इसलिए हम इसे सूक्ति के लिए पाइप करते हैं! बस ?
काइस्टो पाइर्ज़


8
date +"%T" && cp -r ./file  /destination/folder/here && date +"%T"

टर्मिनल में इस कमांड को चलाने से आपको किसी फाइल को कॉपी करने का कुल समय मिलेगा


यह आपको शुरुआती समय और समाप्ति समय देगा, अवधि नहीं।
वेजेंड्रिया

यह एक अच्छा जवाब है, कुछ परिस्थितियों में। उदाहरण के लिए, निम्न findनिर्देश - 2>/dev/nullपुनर्निर्देशित के बिना - प्रचुर Permission denied संदेश देता है । हालाँकि, 2>/dev/nullउस कमांड को जोड़ने से उस कमांड का timeहिस्सा टूट जाता है । निम्नलिखित एक अच्छा समझौता प्रदान करता है: START="$(date +"%s")" && find 2>/dev/null / -path /mnt -prune -o -name "*libname-server-2.a*" -print; END="$(date +"%s")"; TIME="$((END - START))"; printf 'find command took %s sec\n' "$TIME"(उदाहरण के लिए) /usr/lib/libname-server-2.a find command took 3 sec एकमात्र आउटपुट के रूप में।
विक्टोरिया स्टुअर्ट

मेरी टिप्पणी के लिए एक परिशिष्ट: बेशक, आप बस time sudo find / -path /mnt -prune -o -name "*libname-server-2.a*" -print(यानी, के रूप में sudo) चला सकते हैं - उन कई Permission deniedचेतावनियों से परहेज ।
विक्टोरिया स्टुअर्ट

4

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

इसके लिए मैं sw का उपयोग करना पसंद करता हूं ।

sw

इंस्टॉल करें I

wget -q -O - http://git.io/sinister | sh -s -- -u https://raw.githubusercontent.com/coryfklein/sw/master/sw

प्रयोग

sw
 - start a stopwatch from 0, save start time in ~/.sw
sw [-r|--resume]
 - start a stopwatch from the last saved start time (or current time if no last saved start time exists)
 - "-r" stands for --resume

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