代码之家  ›  专栏  ›  技术社区  ›  Suhail Gupta

试图终止进程时出现未知信号错误

  •  1
  • Suhail Gupta  · 技术社区  · 8 年前

    我正在尝试使用 kill 中的方法 child_process . 但在尝试调用函数时,出现以下错误:

    TypeError [ERR_UNKNOWN_SIGNAL]: Unknown signal: 18408
    

    我的工作如下:

        const ls = spawn('node',['print']);
    
        ls.stdout.on('data', (data) => {
        console.log(`stdout: ${data}`);
        });
    
        ls.stderr.on('data', (data) => {
        console.log(`stderr: ${data}`);
        });
    
        ls.on('close', (code) => {
        console.log(`child process exited with code ${code}`);
        });
    
    
        setTimeout(() => {
                ls.kill(ls.pid);
        },4000);
    

    这可能是什么原因?我错过了什么?

    2 回复  |  直到 8 年前
        1
  •  1
  •   Alfe    8 年前

    kill() 发送Unix信号。这些由数字表示。您应该将信号的编号传递给 kill() ,而不是PID。

    尝试

    import signal
    print(signal.SIGTERM)
    

    可能是指纹 15 它是信号项的编号(通常会终止发送到的进程)。

    在您的程序中,您可以调用

    ls.kill(signal.SIGTERM)
    
        2
  •  1
  •   TGrif    8 年前

    事实上,与Linux不同 kill() 命令Nodejs,该命令将进程pid作为kill和一个信号作为参数 子进程 subprocess.kill() 只需要signal参数(根据文档,作为字符串)。

    subprocess.kill([signal])

    这很有意义,因为子流程已经知道它的pid(使用 subprocess.pid )因此,您无需再次提供它。

    要终止进程,可以向 .kill() 方法:

    ls.kill('SIGTERM');
    

    或者,您也可以简单地调用 .kill() 方法,这相当于使用“SIGTERM”信号调用它。

    ls.kill()