जवाबों:
साथ लिनक्स पर ps
से procps(-ng)
(और सबसे अन्य प्रणालियों इस के बाद से POSIX द्वारा निर्दिष्ट किया जाता):
ps -o etime= -p "$$"
$$
आप जिस प्रक्रिया की जांच करना चाहते हैं, उसका पीआईडी कहां है। यह प्रारूप में बीता समय लौटाएगा [[dd-]hh:]mm:ss
।
का उपयोग करना -o etime
बताता है ps
कि आप अभी बीता हुआ समय क्षेत्र चाहते हैं, और उस =
के अंत में हेडर दबा देता है (बिना, आपको एक पंक्ति मिलती है जो कहती है ELAPSED
और फिर अगली पंक्ति पर समय; साथ, आपको समय के साथ बस एक पंक्ति मिलती है) ।
या, लिनक्स पर या FreeBSD 9.0 या इसके बाद के संस्करण (और संभवतः अन्य) पर procps-ng टूल सूट (3.3.0 या इसके बाद के संस्करण) के नए संस्करणों के साथ, उपयोग करें:
ps -o etimes= -p "$$"
(एक जोड़े के साथ s
) सेकंड के रूप में स्वरूपित समय पाने के लिए, जो स्क्रिप्ट में अधिक उपयोगी है।
लिनक्स पर, ps
प्रोग्राम को इससे प्राप्त होता है /proc/$$/stat
, जहां फ़ील्ड (देखें man proc
) में से एक प्रक्रिया प्रारंभ समय है। यह दुर्भाग्य से, सिस्टम बूट के बाद से जिफ़ीस (लिनक्स कर्नेल में इस्तेमाल होने वाला एक मनमाना समय काउंटर) के रूप में निर्दिष्ट है। तो आपको उस समय को निर्धारित करना होगा जिस पर सिस्टम बूट हुआ (से /proc/stat
), इस प्रणाली पर प्रति सेकंड जीफ्स की संख्या, और फिर एक उपयोगी प्रारूप में बीता हुआ समय पाने के लिए गणित करें।
यह HZ के मूल्य (यानी, प्रति सेकंड jiffies) को खोजने के लिए हास्यास्पद रूप से जटिल हो जाता है। sysinfo.c
प्रॉप्स पैकेज में टिप्पणियों से , एक) ए) में कर्नेल हेडर फ़ाइल शामिल हो सकती है और यदि कोई अलग कर्नेल उपयोग किया जाता है तो recompile, B) पॉज़िक्स sysconf()
फ़ंक्शन का उपयोग करता है, जो दुख की बात है, सी लाइब्रेरी में संकलित हार्ड-कोडित मान का उपयोग करता है, या C) कर्नेल से पूछें, लेकिन ऐसा करने के लिए कोई आधिकारिक इंटरफ़ेस नहीं है। तो, ps
कोड में कीचड़ की एक श्रृंखला शामिल है जिसके द्वारा यह सही मूल्य निर्धारित करता है। वाह।
इसलिए यह सुविधाजनक है जो ps
आपके लिए यह सब करता है। :)
लिनक्स पर उपयोगकर्ता @ 336_ नोटों के रूप में (यह पोर्टेबल नहीं है), आप stat
निर्देशिका /proc/$$
(जहां फिर $$
से ब्याज की प्रक्रिया है) के लिए उपयोग, संशोधन, या स्थिति बदलने की तारीखों को देखने के लिए कमांड का उपयोग कर सकते हैं । तीनों संख्याएँ समान होनी चाहिए, इसलिए
stat -c%X /proc/$$
आपको समय देगा कि प्रक्रिया $$
शुरू हो गई, सेकंड में युग के बाद से। यह अभी भी काफी नहीं है कि आप क्या चाहते हैं, क्योंकि आपको अभी भी गणित करने की आवश्यकता है कि वर्तमान समय से घटाकर समय समाप्त करने के लिए - मुझे लगता है कि कुछ date +%s --date="now - $( stat -c%X /proc/$$ ) seconds"
ऐसा काम करेगा, लेकिन यह थोड़ा असहनीय है। एक संभावित लाभ यह है कि यदि आप -c%x
इसके बजाय लंबे प्रारूप वाले आउटपुट का उपयोग करते हैं -c%X
, तो आपको संपूर्ण-संख्या सेकंड से अधिक रिज़ॉल्यूशन प्राप्त होता है। लेकिन, अगर आपको इसकी आवश्यकता है, तो आपको संभवतः प्रक्रिया-ऑडिटिंग दृष्टिकोण का उपयोग करना चाहिए क्योंकि स्टेट कमांड को चलाने का समय सटीकता के साथ हस्तक्षेप करने वाला है।
=
हैडर को दबा देता है। इसके बिना कोशिश करें, या कोशिश करेंps -p $$ -o etime="Silly Header Here"
etimes
खुद को पसंद करता हूं क्योंकि यह मशीन पठनीय है
sysconf()
और इसलिए आपको सी लाइब्रेरी से हार्ड-कोडेड वैल्यू देता है, जैसा कि कहा गया है, नहीं?
पोर्टेबल:
% ps -o stime,time $$
STIME TIME
Jan30 00:00:06
यानी उस शेल को 30 जनवरी को शुरू किया गया था और सीपीयू के समय के लगभग 6 सेकंड का समय था।
इस जानकारी को प्राप्त करने के लिए अधिक सटीक या अधिक पार्स करने योग्य लेकिन कम पोर्टेबल तरीके हो सकते हैं। अपने ps
आदेश या अपने proc
फाइल सिस्टम के प्रलेखन की जाँच करें ।
लिनक्स के तहत, यह जानकारी अंदर रहती है /proc/$pid/stat
।
awk '{print "CPU time: " $14+$15; print "start time: " $22}' /proc/$$/stat
सीपीयू समय jiffies में है; मुझे पता नहीं है कि शेल से जिफ़ी मूल्य कैसे पाया जाए। प्रारंभ समय बूट समय (पाया गया /proc/uptime
) के सापेक्ष है ।
sysinfo.c
क्रेप्स पैकेज में टिप्पणियों से , ए) में कर्नेल हेडर फाइल शामिल हो सकती है (और एक अलग कर्नेल का उपयोग किए जाने पर recompile, b) पॉज़िक्स sysconf () फ़ंक्शन का उपयोग करें, जो दुख की बात है, संकलित हार्ड-कोडित मान का उपयोग करता है c लाइब्रेरी, या c) कर्नेल से पूछें, और ऐसा करने के लिए कोई आधिकारिक इंटरफ़ेस नहीं है। तो, कोड में कीचड़ की एक श्रृंखला शामिल है जिसके द्वारा यह सही मूल्य निर्धारित करता है। वाह।
ps
मैनपेज कहा गया है कि time
कि "संचयी CPU समय"। मुझे लगता है कि ओपी क्या देख रहा था etime
, या "प्रक्रिया शुरू होने के बाद बीता हुआ समय"। pubs.opengroup.org/onlinepubs/000095399/utilities/ps.html
etime
, हालांकि।
ps -eo pid,comm,cmd,start,etime | grep -i X
X प्रक्रिया का नाम है
ps -o pid,comm,cmd,start,etime -p X
पीआईडी एक्स को देखने के लिए
ps
-o
आउटपुट स्वरूप निर्दिष्ट करने के लिए एक विकल्प लेता है , और उपलब्ध कॉलम में से एक है etime
। मैन पेज के अनुसार:
etime - प्रक्रिया शुरू होने के बाद का समय समाप्त हो गया, [[dd-] hh:] mm: ss के रूप में।
इस प्रकार आप पीआईडी पाने के लिए इसे चला सकते हैं और हर प्रक्रिया का समय समाप्त कर सकते हैं:
$ ps -eo pid,etime
यदि आप किसी विशेष PID (जैसे 12345) का बीता हुआ समय चाहते हैं, तो आप कुछ ऐसा कर सकते हैं:
$ ps -eo pid,etime | awk '/^12345/ {print $2}'
( संपादित करें : पता चलता है कि उपरोक्त आदेश के लिए एक छोटा वाक्यविन्यास है; देखें mattdm का उत्तर )
यह पता नहीं लगाएं कि यह अभी तक क्यों नहीं सुझाया गया है: लिनक्स पर आप stat()
अपने पीआईडी के लिए / proc / [nnn] निर्देशिका कर सकते हैं।
यह व्यवहार स्पष्ट रूप से प्रक्रिया शुरू करने के समय को वापस करने के लिए डिज़ाइन किया गया है, जिसे यह उच्च रिज़ॉल्यूशन पर कर सकता है, और जो कर्नेल जिफ़ के बिना सटीक रूप से कर सकता है क्योंकि कर्नेल (स्पष्ट रूप से) बस प्रासंगिक जानकारी की जांच कर सकता है। एक्सेस, डेटा-मोडिफिकेशन और स्टेटस चेंज फ़ील्ड्स सभी प्रक्रिया शुरू होने का समय वापस कर देते हैं।
सभी के लिए, आप stat(1)
शेल में उपयोग कर सकते हैं , या stat(2)
$ favourite_programming_language से उपयुक्त बाइंडिंग कर सकते हैं, इसलिए आपको बाहरी प्रक्रिया शुरू करने की आवश्यकता नहीं हो सकती है।
ध्यान दें कि यह FreeBSD पर काम नहीं करता /usr/compat/linux/proc
है; वर्तमान समय में लौटाए गए / संशोधन / स्थिति-परिवर्तन समय और जन्म का समय UNIX युग है। अगर तुम मुझसे पूछते हो तो समर्थन काफी बेवकूफ है।
stat /proc/4480
यह आपको प्रक्रिया के जन्म, परिवर्तन, संशोधन और एक्सेस की तारीखें देगा। यदि आपको प्रक्रिया आईडी की आवश्यकता है, तो बस "टॉप" का उपयोग करें
यदि आप समय चला सकते हैं और फिर एक कमांड निष्पादित कर सकते हैं तो आपको वही मिलेगा जो आप देख रहे हैं। आप पहले से चल रहे कमांड के खिलाफ ऐसा नहीं कर सकते।
[०]% समय सो २०
नींद 20 0.00s उपयोगकर्ता 0.00s प्रणाली 0% cpu 20.014 कुल
$ ps -eo lstart
प्रारंभ समय
$ ps -eo etime
अवधि / बीता हुआ समय
$ ps -eo pid,lstart,etime | grep 61819
PID STARTED ELAPSED
61819 Mon Sep 17 03:01:35 2018 07:52:15
61819 प्रक्रिया आईडी है।
समय सेकंड में समाप्त हो गया: expr $(date +"%s") - $(stat -c%X /proc/<PID HERE>)
date +%s --date="now - $( stat -c%X /proc/$$
etime=
लिखने में कोई त्रुटि? मैं केवलetime
पुरुष पृष्ठों में पा सकता हूं ।