GNU/Linux >> Belajar Linux >  >> Linux

Bagaimana cara mendapatkan waktu mulai dari proses Linux yang sudah berjalan lama?

Anda dapat menentukan pemformat dan menggunakan lstart , seperti perintah ini:

ps -eo pid,lstart,cmd

Perintah di atas akan menampilkan semua proses, dengan pemformat untuk mendapatkan PID, menjalankan perintah, dan tanggal+waktu dimulai.

Contoh (dari baris perintah Debian/Jessie)

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

Anda dapat membaca ps halaman manual atau periksa halaman Opengroup untuk pemformat lainnya.


Perintah ps (setidaknya versi procps yang digunakan oleh banyak distribusi Linux) memiliki sejumlah bidang format yang berhubungan dengan waktu mulai proses, termasuk lstart yang selalu memberikan tanggal dan waktu lengkap proses dimulai:

# 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

Untuk diskusi tentang bagaimana informasi dipublikasikan di sistem file /proc, lihathttps://unix.stackexchange.com/questions/7870/how-to-check-how-long-a-process-has-been-running

(Dalam pengalaman saya di Linux, stempel waktu pada direktori /proc/ tampaknya terkait dengan momen ketika direktori virtual baru-baru ini diakses daripada waktu mulai proses:

# 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

Perhatikan bahwa dalam hal ini saya menjalankan perintah "ps -p 1" sekitar pukul 16:50, lalu menelurkan bash shell baru, lalu menjalankan perintah "ps -p 1 -p $$" di dalam shell itu tidak lama kemudian... .)


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

Misalnya, PID Google Chrome saya adalah 11583:

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

Sebagai tindak lanjut dari jawaban Adam Matan, /proc/<pid> stempel waktu direktori seperti itu belum tentu berguna secara langsung, tetapi Anda dapat menggunakan

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

untuk mendapatkan waktu mulai dalam detak jam sejak boot sistem.

Ini adalah unit yang sedikit rumit untuk digunakan; lihat juga mengubah sekejap menjadi detik untuk detailnya.

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

Ini akan memberi Anda beberapa detik, yang dapat Anda teruskan ke strftime() untuk mendapatkan stempel waktu (dapat dibaca manusia, atau lainnya).

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

Diperbarui dengan beberapa perbaikan dari Stephane Chazelas di komentar; terima kasih seperti biasa!

Jika Anda hanya memiliki Mawk, mungkin coba

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 @{}

pria proc; telusuri waktu mulai .


Linux
  1. Cara Menggunakan Perintah Sentuh Linux + Contoh

  2. Bagaimana cara mendapatkan jalur proses di Unix / Linux

  3. Bagaimana cara mengurutkan keluaran ps berdasarkan waktu mulai proses?

  1. Temukan Waktu Eksekusi Perintah Atau Proses Di Linux

  2. Linux – Bagaimana Cara Mengatur Afinitas Prosesor Suatu Proses Di Linux?

  3. Linux – Bagaimana Mendapatkan Waktu Jam Dinding Dari Proses Yang Berjalan?

  1. Bagaimana cara menjalankan server web Golang saya di latar belakang?

  2. Bagaimana cara mendapatkan ID proses untuk mematikan proses nohup?

  3. bagaimana cara memulai server kucing jantan di linux?