麒麟系统中查进程运行时长需分三类:用户进程用/proc/[PID]/stat第22字段换算;systemd服务用systemctl status或journalctl查启动时间;图形应用通过loginctl查session时间或ps的etime字段。

在麒麟系统中确认某个进程已运行多久,需从其启动时间戳反推时长,不能直接读取“已运行X小时”这类现成字段。不同进程类型(用户进程/系统服务)的启动时间来源不同,有的来自内核记录,有的依赖systemd日志,必须按路径区分处理。
查用户启动的普通进程运行时间
普通用户通过终端或图形界面启动的进程,其启动时间保存在/proc/[PID]/stat文件第22个字段(start_time),单位为jiffies(内核滴答数),需结合系统启动时间换算。
第一步:用ps或pgrep获取目标进程PID。例如查firefox进程:pgrep -f firefox,输出类似12345的数字。
第二步:读取该PID对应的启动时间戳:cat /proc/12345/stat | awk '{print $22}',得到一个大整数(如4294967295)。
第三步:换算为实际秒数并减去系统启动偏移。执行:awk -v st=4294967295 'BEGIN{printf "%.0f\n", (st/100) - $(1)}' /proc/uptime。这里/proc/uptime第一字段是系统总运行秒数,除以100是因jiffies默认频率为100Hz;【若系统启用了高精度定时器(CONFIG_HZ=250或更高),此处分母需改为对应值,否则结果偏差可达数倍】。
这一步操作起来很简单,直接把上面三行命令串起来就行:pid=$(pgrep -f firefox); st=$(cat /proc/$pid/stat | awk '{print $22}'); awk -v st=$st 'BEGIN{printf "%.0f\n", (st/100) - $(1)}' /proc/uptime。
查systemd管理的服务进程运行时间
systemd服务的启动时间由journald统一记录,比/proc更可靠,尤其适用于nginx、sshd等守护进程。
方法一:用systemctl status查服务元数据
执行systemctl status sshd(将sshd替换为目标服务名),在输出中查找Loaded:和Active:两行。其中Active:后紧跟的时间即为本次启动时刻,例如Active: active (running) since Tue 2026-08-18 14:23:05 CST; 1 day 18h ago——末尾1 day 18h ago就是运行时长,无需计算。
方法二:用journalctl精确提取启动时间
执行journalctl -u sshd --no-pager -n1 | grep "Started",输出形如Aug 18 14:23:05 hostname systemd[1]: Started OpenSSH server daemon.。该时间即为服务启动时刻,与当前时间差即为运行时长。
【注意:journalctl默认只保留最近两周日志,若服务启动早于该时间点,则此法失效】
查图形界面应用(如微信、WPS)的运行时间
这类进程通常由桌面环境(如UKUI)拉起,不被systemd直接管理,但会记录在systemd user session中。
① 先确认当前用户的session ID:loginctl | grep "session-" | head -n1 | awk '{print $1}',输出类似c1。
② 查该session下所有进程启动时间:loginctl show-session c1 -p Type,State,Timestamp,其中Timestamp字段即为该会话(及其中图形应用)的起始时间。
③ 若需单独定位某图形程序,可用ps -eo pid,user,args,etime --sort=-etime | grep -i wechat,etime列即为自进程启动至今的秒数,单位为秒,直接可读。

















