【问题标题】:Killing command in subshell子shell中的杀死命令
【发布时间】:2014-05-23 05:12:55
【问题描述】:

我想跟踪一个文件并输出它的内容,直到达到某种模式。目前,我正在这样做:

grep -q 'pattern' <(tail -F /my/file | tee /dev/stderr)
exit 0

这工作正常,但这里的问题是,即使这个 bash 进程退出,也会有一个 tail 进程挂起。这对 Rundeck 来说是个问题,因为它会认为我的命令还没有完成。我已经尝试了这些选项:

  1. 使用尾 --pid=$$。这适用于 Linux,但我正在使用 Mac,其尾部版本不支持 --pid。

  2. 使用“kill 0”。这确实会杀死尾部进程,但也会使 Rundeck 崩溃(原文如此)。

还有其他建议吗?

【问题讨论】:

    标签: macos bash process tail rundeck


    【解决方案1】:

    您应该改为grouping commands

    { tail -F /my/file | tee /dev/stderr; } | grep -q 'pattern'
    

    现在grep 会在找到模式时将SIGPIPE 发送到管道中的上一个命令。

    【讨论】:

    • 我试过了,但现在我的 bash 进程根本没有退出(即使“模式”出现在输出中)。
    • @user1013725 这很奇怪。我是在测试后写的!
    • 啊,我想是因为“pattern”是文件中的最后一个字符串。如果之后发生了什么,它似乎就结束了。
    猜你喜欢
    • 2020-11-30
    • 1970-01-01
    • 2015-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-04
    • 1970-01-01
    相关资源
    最近更新 更多