【问题标题】:Killing java (Leiningen) processes from Node从 Node 中杀死 java (Leiningen) 进程
【发布时间】:2014-08-10 08:10:39
【问题描述】:

我正在从 NodeJS 启动一堆 java 进程(通过 child_process.spawn)。从技术上讲,我正在启动 Leiningen(一个 Clojure 构建工具,lein)。后来我试图杀死他们和他们所有的孩子。但它几乎从不工作,我得到的只是一个充满javas 的活动监视器 (OSX)。

我首先运行 thisProcess.kill(leinProcess.pid);(默认为 SIGTERM),等待 1 秒,然后调用 leinProcess.kill("SIGKILL"); 来杀死它们。

所有进程和主进程都在同一个用户下运行。

从命令行运行killall -9 java 有效。

【问题讨论】:

    标签: java node.js process kill-process sigkill


    【解决方案1】:

    问题在于孤立的 java 子子进程。有关解释和解决方案,请参阅此自述文件:https://github.com/indexzero/ps-tree

    【讨论】:

    • 如何在 Windows 上使用它?
    【解决方案2】:

    我一直在做同样的事情,在不同的微服务上启动多个 lein run 实例。为了杀死他们,我一直在使用npm install tree-kill

    基本示例

    var kill = require('tree-kill');    
    var spawn = require('child_process').spawn;
    
    var proc = spawn("lein", ["run"], {cwd: './some-dir', detached: true});
    setTimeout(function(){kill(proc.pid); console.log('Take that!');}, 5000);
    

    更多真实示例

    var kill = require('tree-kill');
    var chalk = require('chalk');
    
    exports.killIfAlive= function(pid) {
      try {
        kill(pid);
      }
      catch(ex) {
        console.error(ex);
      }
    };
    
    exports.kill = function(projects) {
      var pids = exports.readPIDFile();
    
      projects.forEach(function(project) {
        if (pids[project]) {
          console.log('Killing', chalk.cyan(project), chalk.magenta('(pid:', pids[project], ')'));
          exports.killIfAlive(pids[project]);
        }
        else {
          console.log(chalk.cyan(project), chalk.grey('is not running.'));
        }
    
        delete pids[project];
      });
    
      return exports.writePIDFile(pids);
    };
    

    在启动每个项目后,我将其 pid 存储到一个简单的对象中,例如 {project1: 12352, project2: 50943},然后将其写入文件系统。由于我使用detached 选项运行spawn('lein' ... etc),因此我当前的节点进程可能会在不取出我的leiningen 进程的情况下死亡。每当我恢复我的节点进程时,它都可以使用 pid 文件来查找和终止一个或多个项目。采用这种方法时,可能会出现竞争条件,即您的具有给定 pid 的 lein 进程已经死亡,并且在该 pid 下启动了一个新进程,我将留给其他人处理。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多