退出码与信号处理
🛑 r0capture 如何响应 Ctrl+C 与异常终止。
信号处理
ssl_log 注册了两个信号处理函数:
python
signal.signal(signal.SIGINT, stoplog)
signal.signal(signal.SIGTERM, stoplog)| 信号 | 触发方式 | 处理 |
|---|---|---|
SIGINT | Ctrl+C | stoplog |
SIGTERM | kill / 系统 | stoplog |
stoplog 做了什么
python
def stoplog(signum, frame):
print('You have stoped logging.')
session.detach()
if pcap:
pcap_file.flush()
pcap_file.close()
exit()- detach session —— 与设备端脚本断开,触发 hook 卸载
- flush + close pcap —— 确保已抓数据落盘
exit()退出
为什么 pcap 用无缓冲
open(pcap, "wb", 0) 已是无缓冲,但 stoplog 里仍 flush() 是双保险——即便中途 SIGTERM,已写入的 pcap 记录也是完整的。
脚本异常的强制终止
设备端脚本抛异常时,on_message 收到 type=="error" 消息:
python
if message["type"] == "error":
logger.info(f"{message}")
os.kill(os.getpid(), signal.SIGTERM)
return直接 os.kill(self, SIGTERM) 终止整个进程——避免静默失败(hook 崩了却还假装在抓)。
阻塞等待
注册完信号后:
python
sys.stdin.read()主线程阻塞在 stdin,等待用户 Ctrl+C。设备端 hook 产生的事件由 frida 的消息线程驱动 on_message 回调处理。