nodejs 中 spawn 开启detached: true, shell: true 新开的窗口无法通过ctrl+c关闭进程
时间: 2024-03-26 15:40:52 浏览: 177
这是因为在 `spawn` 函数中使用了 `shell: true` 选项。这个选项会创建一个新的 shell 进程来执行您的命令,而这个 shell 进程会成为子进程,而不是您的命令本身。因此,当您按下 Ctrl+C 时,信号被发送到了这个 shell 进程,而不是您的命令进程,因此您的命令进程并没有收到信号,不能退出。
要解决这个问题,您可以在 `spawn` 函数中将 `shell` 选项设置为 `false`,然后手动将命令和参数作为数组传递给 `spawn` 函数。这样,`spawn` 函数将直接启动您的命令进程,而不是通过 shell 进程间接启动它,从而使 Ctrl+C 信号能够正确地传递给您的命令进程。如下所示:
```javascript
const { spawn } = require('child_process');
const command = 'your_command';
const args = ['arg1', 'arg2'];
const child = spawn(command, args, {
detached: true,
stdio: 'ignore'
});
child.unref();
```
在这个示例中,我们将 `shell` 选项设置为 `false`,并手动将命令和参数作为数组传递给 `spawn` 函数。我们还将 `stdio` 选项设置为 `'ignore'`,这将使子进程的标准输入、输出和错误流被关闭,从而使子进程成为一个“孤儿”进程,即不会受到父进程的影响。最后,我们使用 `child.unref()` 将子进程“解除引用”,使它成为一个独立的进程,不再与父进程相关联。
这样,您就可以在新的窗口中启动您的命令,并且能够通过 Ctrl+C 关闭它。
阅读全文