एक लंबी चलने वाली लिनक्स प्रक्रिया का आरंभ समय कैसे प्राप्त करें? [बन्द है]


250

क्या पुरानी चल रही प्रक्रिया का प्रारंभ समय प्राप्त करना संभव है? ऐसा लगता है कि psअगर यह आज शुरू नहीं हुआ था, तो तारीख (समय नहीं) की रिपोर्ट करेगा और अगर इस साल इसे शुरू नहीं किया गया है। क्या पुरानी प्रक्रियाओं के लिए सटीकता हमेशा के लिए खो जाती है?


16
क्या उपयोग करने में कुछ गड़बड़ है ps -p <pid> -o lstart? ऐसा लगता है कि यह काम करता है, लेकिन मुझे यकीन नहीं है कि क्यों यह कई बार के लिए तत्काल स्पष्ट जवाब नहीं है यह सवाल सामने आता है।
अजवुड २०'११

7
@ajwood ps -p <pid> -o lstart=अतिरिक्त लाइन (हेडर) को प्रिंट करने के लिए उपयोग करना बेहतर होगा ।
व्लादिमीर प्रोटैसोव

2
क्या उपयोग करने में कुछ गड़बड़ है ps -p <pid> -o lstart? शायद तथ्य यह है कि 2004 संस्करणlstart में न तो है और न ही 2013 संस्करण में POSIX 1003.1 मानक है?
पियोट्र डोब्रोगोस्ट

5
@PiotrDobrogost, अगर POSIX के बारे में सवाल पूछा जाता है, तो यह एक समस्या होगी, लेकिन यह लिनक्स के बारे में पूछ रहा है।
वोमबल

4
Mods - Techraf, Makyen, David Rawson, Tsyvarev, Paul Roub - आप इसे प्रश्न को बंद करने के बजाय StackExchange या Superuser जैसी अधिक उपयुक्त साइट पर क्यों नहीं ले जाते? यह एक अच्छा और उपयोगी प्रश्न है
Hanxue

जवाबों:


392

आप lstartइस कमांड की तरह एक फॉर्मैटर और उपयोग निर्दिष्ट कर सकते हैं :

ps -eo pid,lstart,cmd

उपरोक्त कमांड पीआईडी, कमांड रन, और दिनांक + समय शुरू करने के लिए फॉर्मेटर्स के साथ सभी प्रक्रियाओं का उत्पादन करेगा।

उदाहरण (डेबियन / जेसी कमांड लाइन से)

$ ps -eo pid,lstart,cmd
  PID CMD                                          STARTED
    1 Tue Jun  7 01:29:38 2016 /sbin/init                  
    2 Tue Jun  7 01:29:38 2016 [kthreadd]                  
    3 Tue Jun  7 01:29:38 2016 [ksoftirqd/0]               
    5 Tue Jun  7 01:29:38 2016 [kworker/0:0H]              
    7 Tue Jun  7 01:29:38 2016 [rcu_sched]                 
    8 Tue Jun  7 01:29:38 2016 [rcu_bh]                    
    9 Tue Jun  7 01:29:38 2016 [migration/0]               
   10 Tue Jun  7 01:29:38 2016 [kdevtmpfs]                 
   11 Tue Jun  7 01:29:38 2016 [netns]                     
  277 Tue Jun  7 01:29:38 2016 [writeback]                 
  279 Tue Jun  7 01:29:38 2016 [crypto]                    
      ...

आप अन्य फ़ॉर्मेटरों के लिए मैनपाग के पृष्ठ को पढ़ सकते हैं psया Opengroup का पृष्ठ देख सकते हैं ।


3
@ bobbyrne01: क्रम बदलें, उदाहरण के लिए, पिड, एटिम, सीएमडी मेरे लिए डेबियन व्हीजी पर काम करता है।
निर्गमन

1
@ गोबलींस - etimeप्रक्रिया शुरू होने के बाद का समय समाप्त हो गया है।
जुगल

4
पूर्णता के लिए, बीएसडी सिंटैक्स के लिए उपयोग किए जाने वाले के लिए: ps axo pid,cmd,lstartयह भी काम करता है
ग्रीम मॉस

2
@ bobbyme01: -ww विकल्प का उपयोग करें
एड रान्डेल

1
ध्यान रखें कि lstartसमय बदल सकता है, statनीचे दिए गए तरीके सुरक्षित हैं - unix.stackexchange.com/questions/274610/…
SLM

43

पीएस कमांड (कई लिनक्स वितरण द्वारा उपयोग किए जाने वाले कम से कम procps संस्करण) में कई प्रारूप फ़ील्ड हैं जो प्रक्रिया प्रारंभ समय से संबंधित हैं, lstartजिसमें हमेशा पूरी तिथि और समय शुरू होता है, जिसमें प्रक्रिया शुरू होती है:

# ps -p 1 -wo pid,lstart,cmd
  PID                  STARTED CMD
    1 Mon Dec 23 00:31:43 2013 /sbin/init

# ps -p 1 -p $$ -wo user,pid,%cpu,%mem,vsz,rss,tty,stat,lstart,cmd
USER       PID %CPU %MEM    VSZ   RSS TT       STAT                  STARTED CMD
root         1  0.0  0.1   2800  1152 ?        Ss   Mon Dec 23 00:31:44 2013 /sbin/init
root      5151  0.3  0.1   4732  1980 pts/2    S    Sat Mar  8 16:50:47 2014 bash

जानकारी कैसे / proc फ़ाइल सिस्टम में प्रकाशित की जाती है, इसकी चर्चा के लिए, /unix/7870/how-to-check-how-long-a-process-has-been-running देखें

(लिनक्स के तहत मेरे अनुभव में, / proc / निर्देशिकाओं पर समय की मुहर एक पल से संबंधित लगती है जब वर्चुअल निर्देशिका हाल ही में प्रक्रियाओं के प्रारंभ समय के बजाय एक्सेस की गई थी:

# date; ls -ld /proc/1 /proc/$$ 
Sat Mar  8 17:14:21 EST 2014
dr-xr-xr-x 7 root root 0 2014-03-08 16:50 /proc/1
dr-xr-xr-x 7 root root 0 2014-03-08 16:51 /proc/5151

ध्यान दें कि इस मामले में मैंने लगभग 16:50 बजे एक "ps -p 1" कमांड चलाया, फिर एक नए बैश शेल को चलाया, फिर कुछ ही समय बाद उस शेल के भीतर "ps -p 1 -p $$" कमांड को चलाया ... ।)


हर प्रक्रिया को देखने के लिए (केवल अपने ही नहीं) ps कमांड में एक eमानक (मानक psसिंटैक्स) या ax(BSD सिंटैक्स) तर्क जोड़ें: यानी ps -ewo pid,lstart,cmdयाps -axwo pid,lstart,cmd
रयान ग्रिफ़िथ

15

एडम मेटन के जवाब के अनुवर्ती के रूप में , इस तरह के /proc/<pid>डायरेक्टरी टाइम स्टैम्प आवश्यक रूप से सीधे उपयोगी नहीं हैं, लेकिन आप इसका उपयोग कर सकते हैं

awk -v RS=')' 'END{print $20}' /proc/12345/stat

सिस्टम बूट के बाद से घड़ी की टिक में प्रारंभ समय प्राप्त करने के लिए। 1

यह उपयोग करने के लिए थोड़ा मुश्किल इकाई है; विवरणों के लिए सेकंड्स में जिफ़ीज़ भी देखें।

awk -v ticks="$(getconf CLK_TCK)" 'NR==1 { now=$1; next }
    END { printf "%9.0f\n", now - ($20/ticks) }' /proc/uptime RS=')' /proc/12345/stat

इससे आपको सेकंड strftime()मिलेंगे , जिसे आप (मानव-पठनीय, या अन्यथा) टाइमस्टैम्प प्राप्त करने के लिए पास कर सकते हैं ।

awk -v ticks="$(getconf CLK_TCK)" 'NR==1 { now=$1; next }
    END { print strftime("%c", systime() - (now-($20/ticks))) }' /proc/uptime RS=')' /proc/12345/stat

टिप्पणियों में स्टीफन चेज़ेलस से कुछ सुधारों के साथ अपडेट किया गया; हमेशा की तरह धन्यवाद!

यदि आपके पास केवल मॉक है, तो शायद कोशिश करें

awk -v ticks="$(getconf CLK_TCK)" -v epoch="$(date +%s)" '
  NR==1 { now=$1; next }
  END { printf "%9.0f\n", epoch - (now-($20/ticks)) }' /proc/uptime RS=')' /proc/12345/stat |
xargs -i date -d @{}

1 आदमी खरीद ; शुरुआत के लिए खोज ।


उत्पादन उपयोग के लिए थोड़ा सा रिफ्लेक्ट किया गया
tripleee

1
ध्यान रखें कि strftime()और systime()में मौजूद नहीं हैं mawk, जो कि awkमेरे डेबियन 8 वीपीएस छवियों में डिफ़ॉल्ट है, इसलिए मैं केवल यह मान सकता हूं कि वे gawkबोली के लिए विशिष्ट हैं ।
ssokolow

13
ls -ltrh /proc | grep YOUR-PID-HERE

उदाहरण के लिए, मेरे Google Chrome का PID 11583 है:

ls -l /proc | grep 11583
dr-xr-xr-x  7 adam       adam                     0 2011-04-20 16:34 11583

6
यह मेरे लिए काम नहीं करता है - यह संशोधन समय (अक्सर परिवर्तन) को प्रिंट करता है शायद इस वजह से: unix.stackexchange.com/questions/20460/…
user920391

/ Proc / <pid> का टाइमस्टैम्प विश्वसनीय नहीं है।
हेनिंग

1
यह एक समय 9 मिनट बाद लौटा जब एक प्रक्रिया जिसके बारे में मुझे जानकारी है वास्तव में शुरू हुई थी।
डैन डस्केल्सस्कु

1
यह मेरा एकमात्र विकल्प प्रतीत होता है जो काम करता है, हालांकि शायद विश्वसनीय नहीं है। मैं एक एम्बेडेड सिस्टम पर हूं जिसमें केवल बिजीबॉक्स है psजो invalid optionअन्य उत्तरों द्वारा उल्लिखित सभी विकल्पों के लिए कहता है।
क्यूई फैन

7
क्यों grep? क्यों नहीं ls -ldh /proc/$pid? या इससे भी बेहतर date -r /proc/$pid,?
सीजर


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