本文目录导读:

Linux/Unix 系统
使用 ps 命令(推荐)
# 获取特定进程的启动时间(假设进程名为 "nginx") ps -eo pid,lstart,cmd | grep nginx | head -1 # 更精确的方式(使用 pid) ps -p <PID> -o lstart,etime
使用 /proc 文件系统
# 获取进程启动时间戳(秒数)
cat /proc/<PID>/stat | awk '{print $22}'
# 或者使用更易读的方式
stat /proc/<PID> | grep "Birth"
Shell 脚本示例
#!/bin/bash
# 获取进程启动时间
get_process_start_time() {
local pid=$1
if [ -z "$pid" ]; then
echo "Usage: $0 <PID>"
exit 1
fi
# 方法1: 使用 ps
echo "启动时间: $(ps -p $pid -o lstart= 2>/dev/null)"
# 方法2: 使用 proc
if [ -f /proc/$pid/stat ]; then
local start_time=$(awk '{print $22}' /proc/$pid/stat)
local uptime=$(cat /proc/uptime | awk '{print $1}')
# 系统启动时间
local system_start=$(date -d "now - $uptime seconds" +%s)
local process_start=$((system_start + start_time / 100))
echo "启动时间戳: $(date -d @$process_start '+%Y-%m-%d %H:%M:%S')"
fi
}
# 使用示例:获取 PID 为 1234 的进程启动时间
get_process_start_time 1234
Windows 系统
PowerShell 脚本
# 获取特定进程的启动时间
$processName = "notepad"
Get-Process -Name $processName | Select-Object Name, StartTime, Id
# 或者使用 WMI
Get-WmiObject Win32_Process -Filter "Name='$processName'" |
Select-Object Name, ProcessId, @{Name="StartTime"; Expression={$_.CreationDate}}
批处理脚本
@echo off :: 使用 wmic 获取进程启动时间 set "processName=notepad.exe" wmic process where name="%processName%" get name,processid,creationdate /format:list
Python 脚本(跨平台)
import psutil
import time
from datetime import datetime
def get_process_start_time(process_name):
"""
获取进程启动时间
"""
for proc in psutil.process_iter(['pid', 'name', 'create_time']):
try:
if process_name.lower() in proc.info['name'].lower():
create_time = proc.info['create_time']
start_time = datetime.fromtimestamp(create_time)
return {
'pid': proc.info['pid'],
'name': proc.info['name'],
'start_time': start_time.strftime('%Y-%m-%d %H:%M:%S')
}
except (psutil.NoSuchProcess, psutil.AccessDenied):
pass
return None
# 使用示例
result = get_process_start_time('nginx')
if result:
print(f"进程: {result['name']}")
print(f"PID: {result['pid']}")
print(f"启动时间: {result['start_time']}")
macOS 系统
使用 ps 命令
# 获取进程启动时间 ps -o lstart -p <PID> # 获取所有进程的启动时间 ps aux | grep <process_name>
通用的 Shell 脚本模板
#!/bin/bash
# 通用获取进程启动时间的函数
get_process_info() {
local process_name=$1
local pid=$2
if [ -z "$process_name" ] && [ -z "$pid" ]; then
echo "请提供进程名或PID"
return 1
fi
# 如果提供了进程名,查找对应的 PID
if [ -z "$pid" ]; then
pid=$(pgrep -x "$process_name" | head -1)
if [ -z "$pid" ]; then
echo "未找到进程: $process_name"
return 1
fi
fi
echo "进程信息:"
echo "----------"
echo "PID: $pid"
# 获取启动时间
case "$(uname)" in
Linux)
echo "启动时间: $(ps -p $pid -o lstart= 2>/dev/null)"
# 或者使用 /proc
if [ -f /proc/$pid/stat ]; then
local start_ticks=$(awk '{print $22}' /proc/$pid/stat)
local uptime=$(cat /proc/uptime | awk '{print $1}')
local system_boot=$(date -d "now - $uptime seconds" +%s)
local process_start=$((system_boot + start_ticks / 100))
echo "启动时间戳: $(date -d @$process_start '+%Y-%m-%d %H:%M:%S')"
fi
;;
Darwin)
echo "启动时间: $(ps -o lstart= -p $pid 2>/dev/null)"
;;
*)
echo "不支持的操作系统"
;;
esac
}
# 使用示例
get_process_info "chrome"
# 或者指定 PID
# get_process_info "" 1234
使用说明
- Linux/Mac: 建议使用
ps命令,因为它是 POSIX 标准的一部分 - Windows: PowerShell 提供了最简洁的方式
- 跨平台: Python 的
psutil库是最佳选择 - 权限: 某些系统进程可能需要管理员/root 权限才能访问
根据你的具体需求选择合适的脚本即可。