【问题标题】:Node.js: Initiating process group so that I can kill later if I need toNode.js:启动进程组,以便我以后需要时可以杀死
【发布时间】:2016-04-05 04:36:11
【问题描述】:

我正在创建一个库,它将启动一个进程,然后派生子进程;这很像将集群模块与服务器一起使用,除了在我的情况下,父/主进程和子进程都不是服务器。

我需要做的是能够让用户选择在整个过程开始后终止进程。我知道这样做的唯一方法是让父进程侦听特定端口。然后我可以和父进程通信,它可以负责杀死child_processes。

这样做的一个问题是,如果用户并排运行两个或多个不同的进程组,那么我将不得不增加每个进程组监听的端口,然后用户实际上并不知道什么端口不再存在。

有人知道我要解决的问题吗?对于这种情况有没有好的解决方案?

如果我最终监听特定端口,我应该使用核心节点的net 模块吗?可能是 net.Socket() 选项https://nodejs.org/api/net.html#net_class_net_socket

看来我需要把这个进程变成一个服务器,以便它可以监听端口并轻松接收消息。

【问题讨论】:

    标签: node.js process kill sigkill


    【解决方案1】:

    只需使用 child_process 模块启动,子进程将在父进程时终止。

    然后向父级发送信号,如 SIGINT 或 SIGHUP 或 SIGKILL。见https://nodejs.org/api/process.html#process_signal_events

    // Start reading from stdin so we don't exit.
    process.stdin.resume();
    
    process.on('SIGINT', () => {
      console.log('Got SIGINT.  Press Control-D to exit.');
    });
    

    【讨论】:

    • 好的,可能可行,但是我的 lib 的用户如何知道进程 ID?
    • 启动父进程时,用户怎么知道向哪个进程发送SIGINT信号?
    • 哦,你可以使用 control-c 但是如果它是一个后台进程,我的意思是。
    • 我想我可以在启动时使用 require('process').pid 记录进程 PID,但不确定这是否适用于后台进程,可能需要转到日志用户主目录或其他文件中的文件
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-03
    • 2011-12-12
    • 1970-01-01
    • 2019-08-30
    • 1970-01-01
    • 1970-01-01
    • 2015-06-30
    相关资源
    最近更新 更多