【发布时间】:2013-06-18 02:10:09
【问题描述】:
我有一个运行多个进程的开发堆栈:Web 服务器、自动测试、后台编译等。所有这些都是基本的命令行命令,例如 node app.js 或 lein midje :autotest。
是否可以使用一个脚本在“后台”中运行所有这些进程并将它们的输出合并到一个标准输出中(即:在终端的屏幕上显示它)?
我发现(使用 &)的简单 bash 解决方案的一个问题是,在 Ctrl+C 上,后台进程显然保持活动状态,这是不可取的。
我已经尝试添加陷阱'kill $(jobs -pr)' SIGINT SIGTERM EXIT,但这似乎在 OS X 上不能可靠地工作 - 令人惊讶的是节点进程被杀死,但在脚本退出后 java 进程仍然存在(通过 Ctrl+C)。
我可以使用任何脚本语言。我更喜欢纯 bash 或 JS,但 Python 或 Ruby 也可以。
我还希望在合并的输出中保留 ANSI 转义颜色。
【问题讨论】:
-
Java 进程能否捕捉到信号?如果您在其中一个在前台时按 Ctrl-C 会发生什么?
标签: process merge terminal subprocess stdout