Skip to content

异常追踪(智慧提问)

1. 进程异常

可以把日志导出到文件, 让ai协助分析

1.1. window

借助工具事件查看器(系统自带)gflags(需安装WinDbg)

1.1.1. 安装gflags

参考微软官方说明

x64 参考此教程-如下为此版本方法

arm 参考此教程

方法①: 使用Microsoft Store安装, 点我前往下载

方法②: 使用PowerShell输入命令

PowerShell
winget install Microsoft.WinDbg

1.1.2. 启动监听

说明

设置 image 前需启动软件

Silent Process Exit -> image(输入进程名 需要按tab生效) -> Enable Silent Process Exit Monitoring(勾选进程监听) -> 应用

process-monitor-win

1.1.3. 复现过程

此处正常复现故障即可, 无特殊要求

1.1.4. 查看日志

  1. win + r输入eventvwr.msc打开事件查看器
  2. 选择事件查看器->Windows日志->应用程序
  3. 结论windows已经帮你分析好了

process-log-win

1.2. MAC

借助工具火绒剑

1.2.1. 安装火绒剑

点我前往下载

1.2.2. 启动监听

process-monitor-mac

1.2.3. 复现过程

此处正常复现故障即可, 无特殊要求

1.2.4. 分析日志

  • stat:0 表示进程正常退出
  • stat:256 表示进程可能因为某种错误或异常退出
  • stat:15 表示进程可能是因为接收到信号而退出
bash
1. 进程ID 34395 向目标进程ID 34397 发送了 SIGTERM 信号(终止信号)
2. 这表明进程 34397 是被进程 34395 显式终止的,而进程 34397 的退出状态码是 stat:15,这与 SIGTERM 信号的预期行为一致
结论: 子进程是被软件自己kill的, 需从软件本身排查原因

1.3. Linux

借助工具audit

1.3.1. 安装audit

Debian|Ubuntu基础的系统上(如统信UOS|麒麟KOS

bash
sudo apt update
sudo apt install auditd

欧拉|龙晰基础的服务器系统上(如中科方德

bash
sudo yum update
sudo yum install audit

process-audit-install-linux

1.3.2. 启用audit

bash
sudo systemctl start auditd

process-audit-start-linux

1.3.3. 添加audit规则

参数说明

使用auditctl -h查看

bash
# 总是记录监听 64位程序 kill 信号
sudo auditctl -a exit,always -F arch=b64 -S kill -k zyfun_kill

process-audit-monitor-linux

1.3.4. 复现过程

此处正常复现故障即可, 无特殊要求

1.3.5. 日志检索

参数说明

使用ausearch -h查看

bash
sudo sudo ausearch -k zyfun_kill

process-audit-log-linux

1.3.5. 日志分析

  1. 分析日志
bash
type=PROCTITLE msg=audit(1744900347.539:197): proctitle=2F6F70742F7A7966756E2F7A7966756E002F6F70742F7A7966756E2F7265736F75726365732F6170702E617361722F6F75742F6D61696E2F736974655F647270795F776F726B65722E6A73

1. `type=PROCTITLE`: 进程标题信息
2. `proctitle`: 进程命令行参数(16进制), 解码后为:`/opt/zyfun/zyfun /opt/zyfun/resources/app.asar/out/main/site_dropy_worker.js`
bash
type=OBJ_PID msg=audit(1744900347.539:197): opid=12600 oauid=1000 ouid=1000 oses=2 ocomm="zyfun"

1. `type=OBJ_PID`: 表示目标进程的信息
2. `opid=12600`: 目标进程的 PID 12600
3. `oauid=1000`: 目标进程的审计用户 ID(auid)为 1000
4. `ocomm="zyfun"`: 目标进程的命令名为 zyfun
bash
type=SYSCALL msg=audit(1744900347.539:197): arch=c00000b7 syscall=129 success=yes exit=0 a0=3138 a1=f a2=1 a3=420043d0f9 items=0 ppid=12107 pid=12584 auid=1000 uid=1000 gid=1000 euid=1000 suid=1000 fsuid=1000 egid=1000 sgid=1000 fsgid=1000 tty=(none) ses=2 comm="zyfun" exe="/opt/zyfun/zyfun" key="zyfun_kill"

1. `type=SYSCALL`:表示这是一个系统调用事件
2. `arch=c00000b7`:表示系统调用的架构为 64 位(b64)
3. `syscall=129`:表示系统调用的编号为 129,对应于 kill 系统调用
4. `success=yes`:表示系统调用成功执行
5. `exit=0`:表示系统调用的返回值为 0,表示成功
6. `a0=3138`:第一个参数,表示目标进程的 PID(opid)
7. `a1=f`:第二个参数,表示发送的信号编号(SIGTERM,值为 15)
8. `a2=1`:第三个参数,表示信号的来源(1 表示来自用户空间)
9. `comm="zyfun"`:调用 kill 系统调用的进程名为 zyfun
10. `exe="/opt/zyfun/zyfun"`:调用 kill 系统调用的可执行文件路径
11. `key="zyfun_kill"`:这条日志与您设置的键值 zyfun_kill 匹配
  1. 分析结果
bash
1. 进程被发送了 SIGTERM 信号
    - syscall=129 表示这是一个 kill 系统调用
    - a1=f 表示发送的信号编号为 15,即 SIGTERM
    - a0=3138 表示目标进程的 PID 12600。
2. 信号是由进程自身发送的
    - comm="zyfun" exe="/opt/zyfun/zyfun" 表示调用 kill 系统调用的进程是 zyfun 本身
    - ppid=12107 pid=12584 表示父进程和当前进程的 ID

进程是被自身终止的, 而不是被其他软件杀掉(需从软件本身排查原因)

2. 接口异常

接口说明

定义-code:0 为成功, 其他为失败

f12-network-preview

Released under the MIT License.