获取Linux设备系统启动时间和进程启动时间
获取Linux设备系统启动时间和进程启动时间
1、/proc/[pid]/stat
cat /proc/3889/stat 3889 (syslogd) S 1 3889 3889 0 -1 4194368 98 0 0 0 2 5 0 0 20 0 1 0 2367 2723840 335 4294967295 65536 813332 3203767808 0 0 0 0 1 16386 1 0 0 17 1 0 0 0 0 0 880376 882517 884736 3203768080 3203768106 3203768106 3203768302 0
-
PID (字段 0):
3889
- 进程 ID 为 3889。
-
进程名 (字段 1):
(syslogd)
- 进程名称为
syslogd
(系统日志守护进程)。
- 进程名称为
-
进程状态 (字段 2):
S
-
S 表示进程处于 可中断睡眠(等待事件完成,如 I/O 操作)。
R:runnign, S:sleeping (TASK_INTERRUPTIBLE), D:disk sleep (TASK_UNINTERRUPTIBLE), T: stopped, T:tracing stop,Z:zombie, X:dead
-
-
PPID (字段 3):
1
- 父进程 ID 为 1(通常是
systemd
或init
进程)。
- 父进程 ID 为 1(通常是
-
进程组与会话 (字段 4-5):
- PGID (字段 4):
3889
(进程组 ID 与 PID 相同,表示是组长进程)。 - Session ID (字段 5):
3889
(会话 ID 与 PID 相同)。
- PGID (字段 4):
-
终端信息 (字段 6-7):
- tty_nr (字段 6):
0
(无控制终端)。 - tpgid (字段 7):
-1
(前台进程组 ID 无效,无终端关联)。
- tty_nr (字段 6):
-
缺页统计 (字段 9-12):
- minflt (字段 9):
98
(次要缺页次数,无需磁盘 I/O)。 - majflt (字段 11):
0
(主要缺页次数,需磁盘 I/O)。 - 子进程缺页统计(字段 10, 12)均为
0
。
- minflt (字段 9):
-
CPU 时间 (字段 13-16):
- utime (字段 13):
2
(用户态运行时间,单位:时钟滴答jiffies)。 - stime (字段 14):
5
(内核态运行时间,单位:时钟滴答jiffies)。 - cutime: 0,累计的该任务的所有的waited-for进程曾经在用户态运行的时间,单位为jiffies。
- cstime: 0,累计的该任务的所有的waited-for进程曾经在核心态运行的时间,单位为jiffies。
- utime (字段 13):
-
优先级与调度 (字段 17-20):
- priority (字段 17):
20
(动态优先级)。 - nice (字段 18):
0
(静态优先级调整值,默认优先级)。 - num_threads (字段 19):
1
(仅 1 个线程)。 - itrealvalue (字段 20):
0
(废弃字段)。
- priority (字段 17):
-
启动时间 (字段 21):
2367
- start_time进程启动时刻(单位:时钟滴答),需结合系统启动时间计算绝对时间。
-
内存使用 (字段 22-24):
- vsize (字段 22):
2723840
(虚拟内存大小 ≈ 2.6 MB)。 - rss (字段 23):
335
(驻留物理内存页数,每页通常 4 KB → 335 × 4 KB ≈ 1.34 MB)。 - rsslim (字段 24):
4294967295
(RSS 软限制,值0xFFFFFFFF
表示无限制)。
- vsize (字段 22):
-
地址空间 (字段 25-30):
- startcode/endcode (字段 25-26):
65536
,813332
(代码段起止地址)。 - startstack (字段 27):
3203767808
(栈起始地址)。 - kstkesp/kstkeip (字段 28-29):
0
(当前栈指针和指令指针,可能为内核态值)。 - signal/blocked (字段 30-33): 信号位图(待处理、阻塞、忽略、捕获的信号)。
- startcode/endcode (字段 25-26):
-
挂起等待 (字段 34):
0
- wchan:
0
(等待事件的内核地址,0 表示无等待)。
- wchan:
-
退出与调度 (字段 37-41):
- exit_signal (字段 37):
17
(进程退出时向父进程发送的信号,SIGCHLD
)。 - processor (字段 38):
1
(最后运行的 CPU 编号)。 - rt_priority (字段 39):
0
(实时优先级,0 表示普通进程)。 - policy (字段 40):
0
(调度策略,0 为SCHED_NORMAL
)。
- exit_signal (字段 37):
-
内存布局 (字段 44-50):
- start_data/end_data (字段 44-45):
880376
,882517
(数据段起止)。 - start_brk (字段 46):
884736
(堆起始地址)。 - arg_start/arg_end (字段 47-48):
3203768080
,3203768106
(命令行参数地址)。 - env_start/env_end (字段 49-50):
3203768106
,3203768302
(环境变量地址)。
- start_data/end_data (字段 44-45):
-
退出状态 (字段 51):
0
- exit_code:
0
(进程尚未退出)。
- exit_code:
注:字段从0开始累计
进程的总Cpu时间processCpuTime = utime + stime + cutime + cstime,该值包括其所有线程的cpu时间。
2、/proc/stat
cat /proc/statcpu 76365 0 231716 826914 1167 0 14933 0 0 0
cpu0 71215 0 196028 280105 549 0 14930 0 0 0
cpu1 5150 0 35688 546809 618 0 3 0 0 0
intr 20010304 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 8004733 0 0 0 0 0 10 408408 49114 3467541 0 270133 619373 0 0 0 96963 773185 0 0 0 0 4426 0 2 0 0 0 0 0 0 92496 0 0 0 1456328 0 0 0 0 3 0 0 0 0 0 0 0 0 0 0 1 1
ctxt 24407140
btime 1749798323
processes 13785
procs_running 2
procs_blocked 0
softirq 4706790 0 1038568 33285 1480921 0 0 16 1008048 0 1145952
总的cpu时间totalCpuTime = user + nice + system + idle + iowait + irq + softirq + stealstolen + guest
btime 系统启动时间点
#!/bin/shALL_SERVER=`cat /tmp/app/exec/app.json |grep name |awk -F ":" '{print $2}'| sed 's/"//g' | sed 's/,//g'`RSize=0
VSize=0
PSize=0printvalue()
{RSize=0VSize=0PSize=0boot_time=$(awk '/btime/ {print $2}' /proc/stat)echo "kernel_start $boot_time"cd /procfor ecpt in $ALL_SERVERdoallprocid=`ps | grep $ecpt | grep -v '/bin/sh' | grep -v 'grep' | awk '{print $1}'`for procid in $allprociddoawk '{print $14, $15, $16, $17, $22}' "/proc/$procid/stat" | {read utime stime cutime cstime start_timetotal_cpu_time_jiffies=$((utime + stime + cutime + cstime))# 获取当前系统时间(jiffies)uptime=$(awk '{print $1}' /proc/uptime)new_time=$((start_time / 100 + boot_time))echo "$ecpt $new_time"}donedonereturn 0
}printinfo()
{printvaluedatereturn 0
}printinfo