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

Unknown signal error as I try to kill a process

我正在尝试使用 child_process 中的 kill 方法终止进程。但是当我尝试调用该函数时出现以下错误:

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);

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

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

尝试

import signal
print(signal.SIGTERM)

这可能会打印出 15,这是信号 TERM 的编号(通常会终止它发送到的进程)。

在你的程序中你可以调用

ls.kill(signal.SIGTERM)

事实上,Nodejs ChildProcess [=13] 不同于Linux kill() 命令,它以要杀死的进程pid和一个信号作为参数=] 只需要信号参数(根据文档作为字符串)。

subprocess.kill([signal])

这是有道理的,因为子进程已经知道它的 pid(使用 subprocess.pid 时获得的 pid),所以您不需要再次提供它。

要终止您的进程,您可以将有效信号传递给 .kill() 方法:

ls.kill('SIGTERM');

或者,您也可以不带任何参数直接调用子进程的 .kill() 方法,这等同于使用 'SIGTERM' 信号调用它。

ls.kill()