1

我正在尝试在 nodejs 中执行一个 bash shell - 除了作业控制之外,我一直在工作。我很确定这是因为生成的进程没有被设置为进程负责人。在 C 中,我可以通过调用 setsid() 来做到这一点。在 nodejs 中,我读到在生成新进程时设置选项“setsid:true”。我这样做是这样的:

var child = spawn('/bin/bash', ['--login'], {stdio: [this.slave, this.slave, this.slave], env: {"TERM": "vt100"}, setsid: true});

但是我仍然收到消息“在这个 shell 中没有作业控制”。
分配 pty ttys002 后的示例输出:

bash: no job control in this shell
Amandas-MacBook-Pro:puffshell amanda$ tty
/dev/ttys002
Amandas-MacBook-Pro:puffshell amanda$ 
Amandas-MacBook-Pro:puffshell amanda$ ps
  PID TTY           TIME CMD
  2055 ttys000    0:00.05 -bash
  2158 ttys000    0:00.01 /bin/bash
  2170 ttys000    0:00.11 puffd 
  2171 ttys000    0:00.01 /bin/bash --login
Amandas-MacBook-Pro:puffshell amanda$ 

总而言之,我的问题是:
- 这是设置新进程会话 ID 的正确方法吗?如果是这样,我如何明确检查它实际上是否正确地执行了该操作(在我看来,事实并非如此 - 这是我想象的唯一会导致没有工作控制的事情,因为 tty 命令是证据表明pty 设置正确)。
- 如果此方法不起作用,是否有任何不涉及下载模块的 setsid() 替代方法?如果没有,我将编写一个 c++ 插件。
谢谢你的帮助!

4

1 回答 1

2

您使用的是什么版本的节点?setsid 曾经在文档中,但被替换为分离的选项。

https://nodejs.org/api/child_process.html#child_process_options_detached

于 2015-08-20T16:57:21.620 回答