【问题标题】:Running and killing servers and watchers from a bash script从 bash 脚本运行和杀死服务器和观察者
【发布时间】:2012-01-24 02:22:24
【问题描述】:

对于我正在开发的 webapp,我有一个 bash 脚本来监视源代码的变化并更新运行环境。

function app-serve {
    python runserver.py
}

function compile-coffee {
    inotifywait -e modity scripts | while read change; do
        coffee -o js scripts
    done
}

现在,我需要这两个函数同时运行,

app-serve &
compile-coffee &

等等

wait

问题是,当我想停止这些进程时,一个简单的Ctrl-C 并没有这样做。当我执行Ctrl-C 时,我会返回命令提示符,但函数中运行的进程仍然存在。

有没有办法告诉 bash 等到我点击 Ctrl-C,然后杀死所有子进程?

编辑:澄清一下,我看到我在app-serve 函数中启动的python 进程 杀死了。只有inotifywait 和几个bash 进程悬空。

【问题讨论】:

    标签: bash shell subprocess


    【解决方案1】:

    您可以在 bash 脚本中捕获 ctrl-c 信号,并让它执行一个查找进程并终止它们的函数。

    http://hacktux.com/bash/control/c

    可能类似于 killall app-server 和 killall compile-coffee。

    不要忘记通过调用 exit 来退出 bash 脚本。

    【讨论】:

    • 不错。感谢您提供有关诱捕的信息。但是,我想找到 pid 并杀死它们,而不是 killall。另外,当我将函数名称命名为killall 时,它会显示app-server: no process found
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-24
    • 2017-10-06
    • 2019-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多