Uzun süredir devam eden bir Linux sürecinin başlangıç ​​zamanını nasıl alabilirim? [kapalı]


250

Eski çalışan bir işlemin başlangıç ​​zamanını almak mümkün müdür? Görünüşe göre psbugün başlamamışsa tarihi (zamanı değil) ve bu sene başlamamışsa sadece yılı rapor edecek. Eski süreçler için hassasiyet sonsuza kadar kaybedilir mi?


16
Kullanırken yanlış olan bir şey var mı ps -p <pid> -o lstart? İşe yarıyor gibi görünüyor, ancak bu sorunun ortaya çıktığı birçok kez neden hemen açık bir cevap olmadığını bilmiyorum.
ajwood

7
@ajwood ps -p <pid> -o lstart=Ek satırın (başlık) yazdırılmasını önlemek için kullanmak daha iyi olur .
Vladimir Protasov

2
Kullanırken yanlış olan bir şey var mı ps -p <pid> -o lstart? Belki gerçeği hiçbir orada lstartiçinde ne 2004 Edition'da ne de içinde 2013 Sürümü POSIX 1003.1 standardı?
Piotr Dobrogost

5
@PiotrDobrogost, soru POSIX hakkında soru sorsa bir sorun olurdu, ancak Linux hakkında soruyor.
Aralık'ta

4
Modlar - techraf, Makyen, David Rawson, Tsyvarev, Paul Roub - neden soruyu kapatmak yerine StackExchange veya Superuser gibi daha uygun bir siteye taşımıyorsunuz? Bu iyi ve kullanışlı bir soru
Hanxue

Yanıtlar:


392

Bir biçimlendirici belirtebilir ve lstartşu komut gibi kullanabilirsiniz :

ps -eo pid,lstart,cmd

Yukarıdaki komut, PID, komut çalıştırma ve tarih + saat başlatmak için biçimlendiricilerle tüm işlemleri çıktılar.

Örnek (Debian / Jessie komut satırından)

$ 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]                    
      ...

Okuyabiliyorsun ps'ın manpage veya Opengroup en sayfasını kontrol diğer biçemleyicilerle için.


3
@ bobbyrne01: siparişi değiştirin, örneğin pid, etime, cmd Debian Wheezy'de benim için çalışıyor.
Ocak'ta

1
@Gobliins - etimeişlemin başlamasından bu yana geçen süredir.
wkl

4
tamlık için, BSD sözdizimine alışkın olanlar için: ps axo pid,cmd,lstartayrıca çalışır
Graeme Moss

2
@ bobbyme01: -ww seçeneğini kullanın
Ed Randall

1
Unutmayın lstartzaman değiştirebilir, statyöntemler aşağıda daha güvenlidir - unix.stackexchange.com/questions/274610/... .
slm

43

Ps komutu (en azından birçok Linux dağıtımı tarafından kullanılan procps sürümü), işlemin başlama saatiyle ilgili olan ve işlemin lstarther zaman başladığı tarih ve saati veren bir dizi biçim alanına sahiptir :

# 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

Bilgilerin / proc dosya sisteminde nasıl yayınlandığı hakkında bir tartışma için bkz. Https://unix.stackexchange.com/questions/7870/how-to-check-how-long-a-process-has-been-running

(Linux altındaki tecrübelerime göre, / proc / dizinlerindeki zaman damgası, işlemlerin başlangıç ​​zamanından ziyade sanal dizine en son erişildiği bir anla ilişkili görünmektedir:

# 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

Bu durumda yaklaşık 16: 50'de "ps -p 1" komutunu çalıştırdıktan sonra yeni bir bash kabuğu oluşturduğumdan, kısa bir süre sonra bu kabukta "ps -p 1 -p $$" komutunu çalıştırdığımı unutmayın ... .)


Her işlemi görmek için (yalnızca kendiniz değil) ps komutuna bir e(standart pssözdizimi) veya ax(BSD sözdizimi) bağımsız değişkeni ekleyin : ie ps -ewo pid,lstart,cmdveyaps -axwo pid,lstart,cmd
Ryan Griffith

15

Adam Matan'ın cevabının bir takibi olarak , /proc/<pid>yönetmenin zaman damgası mutlaka doğrudan yararlı değildir, ancak

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

sistem açılışından bu yana saat kenelerinde başlangıç ​​zamanını almak için. 1

Bu kullanımı biraz zor bir birimdir; ayrıca bkz saniyeye jiffies dönüştürmek detaylar için.

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

Bu size strftime()(insan tarafından okunabilir veya başka türlü) bir zaman damgası almak için geçebileceğiniz saniyeler vermelidir .

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

Yorumlarda Stephane Chazelas'ın bazı düzeltmeleri ile güncellendi; her zamanki gibi teşekkürler!

Sadece Mawk'iniz varsa, belki deneyin

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 adam proc ; starttime için arama .


Üretim kullanımı için biraz yeniden düzenlendi: gist.github.com/tripleee/2a1622fdf8ab080ce3b36d95af60010a
üçlü

1
Debian 8 VPS görüntülerimde varsayılan olan strftime()ve systime()mevcut olmadığını aklınızda bulundurun , böylece yalnızca lehçelerine özgü olduklarını varsayabilirim . mawkawkgawk
ssokolow

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

Örneğin, Google Chrome'umun PID değeri 11583:

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

6
Bu benim için çalışmıyor - değişiklik zamanını yazdırıyor (sık sık değişiyor) Belki de bundan dolayı: unix.stackexchange.com/questions/20460/…
user920391

/ Proc / <pid> zaman damgası güvenilir değildir.
Henning

1
Bu, 9 dakika sonra hakkında bilgi sahibi olduğum bir sürecin gerçekten başladığından bir süre geri döndü.
Dan Dascalescu

1
Bu, belki de güvenilir olmasa da, çalışan tek seçeneğim gibi görünüyor. Ben sadece diğer cevaplar tarafından belirtilen tüm seçenekler için psdiyor meşgul kutusu olan gömülü bir sistemdeyim invalid option.
Qi Fan

7
Neden grep? Neden olmasın ls -ldh /proc/$pid? Ya da daha iyisi date -r /proc/$pid?
Sezar


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.