怎么用脚本获取进程启动时间

wen 实用脚本 1

本文目录导读:

怎么用脚本获取进程启动时间

  1. Linux/Unix 系统
  2. Windows 系统
  3. macOS 系统
  4. 通用的 Shell 脚本模板
  5. 使用说明

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

使用说明

  1. Linux/Mac: 建议使用 ps 命令,因为它是 POSIX 标准的一部分
  2. Windows: PowerShell 提供了最简洁的方式
  3. 跨平台: Python 的 psutil 库是最佳选择
  4. 权限: 某些系统进程可能需要管理员/root 权限才能访问

根据你的具体需求选择合适的脚本即可。

抱歉,评论功能暂时关闭!