#!/data/data/com.termux/files/usr/bin/bash # 进程判活探针(只读)——process-liveness-probe skill §二 的可执行版 # # 用法: bash liveness_probe.sh [pid] # pattern : ps 的 grep pattern(建议用真身关键字,如 'hermes gateway' / 'watchdog') # pid : 可选;给了就直读 /proc//cmdline 出正身(最硬的一条证据) # # 判读纪律(写汇报前必读): # - [2] 段 0 命中 ≠ 进程不在(-o cmd 只给 comm/解释器名:python 脚本进程只显 `python3`) # - 阳性只在 [1] / [3] 段取得;两者都阴才写「未复核存在性」,不写「进程没了」 # - 跨轮比 pid 前先在本轮复核 pid,再写「未重启 / 已重启」 PAT="${1:?usage: liveness_probe.sh [pid]}" PID="${2:-}" echo "== [1] su 侧完整 argv(ps -ef,首选读法) pattern='$PAT'" su -c "ps -ef" 2>/dev/null | grep -Ei "$PAT" | grep -v grep echo "== [2] su 侧 -o cmd(⚠️ 只见 comm/解释器名;0 命中不算证据)" su -c "ps -A -o user,pid,ppid,etime,cmd" 2>/dev/null | grep -Ei "$PAT" | grep -v grep echo "== [2b] 自己 uid 的全部进程(按 comm 口径,用于对照)" su -c "ps -A -o user,pid,ppid,etime,cmd" 2>/dev/null | awk 'NR==1 || $1 ~ /^u0_a/' echo "== [3] /proc 直读正身(pid=${PID:-<未给,跳过>})" if [ -n "$PID" ]; then if ls -l "/proc/$PID/cmdline" >/dev/null 2>&1; then echo " cmdline 可读 ⇒ 活着;argv =" su -c "tr '\0' ' ' < /proc/$PID/cmdline" 2>/dev/null; echo su -c "ps -o etime= -p $PID" 2>/dev/null else echo " /proc/$PID 不存在 ⇒ 这条才是真死(先确认 pid 没变)" fi fi echo "== [4] 提醒:0 命中不算证据;python 起的进程在 [2] 只显 'python3',正身看 [1]/[3]"