Macaca 管理 macaca 多个 Server,大家都是如何管理的呢?

sruru · 2017年02月07日 · 最后由 sixleaves 回复于 2017年02月13日 · 1013 次阅读

我最近在使用 Macaca 进行测试,在 java 中使用多线程进行测试,启动 server 的代码如下

public void execCmd() {
    logger.debug("To exec cmd :" + this.command);
    try {
        ProcessBuilder pb = new ProcessBuilder(generateAl(command));
        pb.redirectErrorStream(true);
        this.p = pb.start();
    } catch (IOException e) {
        logger.error(e.toString());
    }
}

结束 server 的代码如下:

public void destroy() {
    if (this.p != null) {
        if(this.thread != null) {
            this.thread.setExitFlag(true);
        }
        this.p.destroy();
    }
}

现在存在的问题是:执行 this.p.destroy();之后

501  1606  1521   0  8:25下午 ttys005    0:00.26 node /usr/local/bin/macaca server -p 3456
 501  1607  1606   0  8:25下午 ttys005    0:00.26 node /usr/local/lib/node_modules/macaca-cli/bin/macaca-cli-server -p 3456

只有

501  1606  1521   0  8:25下午 ttys005    0:00.26 node /usr/local/bin/macaca server -p 3456

这条进程被销毁,

501  1607  1606   0  8:25下午 ttys005    0:00.26 node /usr/local/lib/node_modules/macaca-cli/bin/macaca-cli-server -p 3456

进程依然存在,端口没有释放,所以想请教下各位有没有什么好的 macaca server 的管理方法,因为我不想采用扫描端口杀进程的方法来实现

共收到 6 条回复 时间 点赞

@xdf @junhe 来瞧瞧,这个问题不错。

PID 1607 是 PID 1606 fork 出来的子进程,直接 kill 1606 就可以了,应该不会产生僵尸进程和孤儿进程。

看源码 https://github.com/macacajs/macaca-cli/blob/master/bin/macaca-cli#L103

#2 楼 @xdf 非常感谢,我会再去看下源代码

@ruru Java 封装命令行的原因是什么呢?用 shell 不行吗?

我也遇到了这个问题,开始使用 supervisor 管理,发现不能彻底关闭;然后尝试了 launchagents 管理,可以彻底关闭。

你是在测 macaca 的并发吗?

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册