【问题标题】:In bash kill only first process in a pipeline在 bash 中仅杀死管道中的第一个进程
【发布时间】:2017-12-07 18:49:31
【问题描述】:

如果我有一个定期输出一些数据的长时间运行的命令,例如tail -F 我想用 awk(或其他东西)处理:

tail -F service.log | awk '{ ... } END { print ... }'

如何只杀死第一个进程(在这种情况下为尾部),以便我可以在 awk 中看到 END {} 块的结果?如果我按 Control+C 整个管道将停止。

我发现一种可行的方法是打开一个单独的选项卡/窗口,即第一个进程的 grep PID 和 kill 从那里打开它,但这似乎很笨拙,还有其他解决方案吗?

【问题讨论】:

    标签: linux bash


    【解决方案1】:

    大概是这样的吧?

    tail -F service.log | (trap '' INT; awk '{ ... } END { print ...}')
    

    【讨论】:

    • 您仍然可以使用 SIGHUP 或在最坏的情况下使用 SIGKILL 杀死它。在这种有限的情况下,无论如何,它都会在从管道中获得 EOF 时终止。
    猜你喜欢
    • 1970-01-01
    • 2011-02-16
    • 2023-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多