GNU/Linux >> Linux の 問題 >  >> Linux

長時間実行されている Linux プロセスの開始時刻を取得するには?

フォーマッタを指定して lstart を使用できます 、このコマンドのように:

ps -eo pid,lstart,cmd

上記のコマンドは、すべてのプロセスを出力し、PID、コマンドの実行、開始日時を取得するためのフォーマッターを使用します。

例 (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]                    
      ...

ps を読み取ることができます のマンページを参照するか、Opengroup のページで他のフォーマッタを確認してください。


ps コマンド (少なくとも、多くの Linux ディストリビューションで使用される 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 ファイルシステムで情報が公開される方法については、https://unix.stackexchange.com/questions/7870/how-to-check-how-long-a-process-has-been-running を参照してください

(Linux での私の経験では、/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」コマンドを実行してから、新しい bash シェルを生成し、その直後にそのシェル内で「ps -p 1 -p $$」コマンドを実行したことに注意してください... .)


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

Adam Matan の回答のフォローアップとして、 /proc/<pid> ディレクトリのタイムスタンプ自体は、必ずしも直接役立つとは限りませんが、使用できます

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

システム起動からの開始時刻をクロック ティックで取得します。

これは少し扱いに​​くいユニットです。詳細については、ジフィーを秒に変換するも参照してください。

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

コメントで Stephane Chazelas からのいくつかの修正で更新されました。いつもありがとう!

Mawkしか持っていない場合は、試してみてください

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

男の手続き; 開始時間を検索 .


Linux
  1. Linuxでのコマンドまたはプロセスの実行時間を検索する

  2. Unix / Linux でプロセスのパスを取得するにはどうすればよいですか

  3. nohupプロセスを強制終了するプロセスIDを取得するには?

  1. LinuxTouchコマンドの使用方法+例

  2. 実行中のプロセスのウォールクロック時間を取得するにはどうすればよいですか?

  3. ps出力をプロセス開始時間でソートする方法は?

  1. Linux – Linuxでプロセスのプロセッサ親和性を設定するにはどうすればよいですか?

  2. Linux –実行中のプロセスの壁掛け時計の時間を取得する方法は?

  3. Golang Web サーバーをバックグラウンドで実行するにはどうすればよいですか?