You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让adb logcat流在grep匹配首个结果后终止进程?

解决adb logcat在grep匹配后不终止的问题

当你执行MY_VARIABLE=$(adb logcat | grep -m 1 'my variable (.*)')时,grep找到首个匹配项会退出,但adb logcat可能因忽略SIGPIPE信号继续运行,以下是几种直接有效的解决方法:

方法1:匹配后直接杀掉adb进程

利用当前shell的PID定位并终止目标adb子进程,命令如下:

MY_VARIABLE=$(adb logcat | grep -m 1 'my variable (.*)'); pkill -P $$ adb
  • $$代表当前执行命令的shell进程ID
  • -P $$指定只杀掉父进程为当前shell的adb进程,避免误杀其他adb实例

方法2:捕获adb PID并主动终止

通过子shell和文件描述符传递输出,匹配完成后直接终止adb进程:

(adb logcat & PID=$!; grep -m 1 'my variable (.*)' <&3; kill $PID) 3<&0
  • 启动adb后立即记录其PID到变量$PID
  • 用文件描述符3传递adb的输出给grep,规避管道关闭引发的信号异常
  • grep匹配完成后执行kill $PID直接终止adb

方法3:通过进程组批量终止

将adb和grep归入同一进程组,匹配完成后向整个进程组发送终止信号:

set -m
MY_VARIABLE=$(adb logcat | grep -m 1 'my variable (.*)')
kill -- -$!
set +m
  • set -m开启作业控制,让管道内的进程属于同一个进程组
  • kill -- -$!向最后一个后台进程的进程组发送终止信号,会连带终止adb
  • set +m关闭作业控制,恢复shell默认行为

内容的提问来源于stack exchange,提问作者Gabriel Furstenheim

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 01:02:11