Nodejs setsid() 等效
Nodejs setsid() equivalent
我正在尝试在 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});
但是我仍然收到消息 "no job control in this 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++ 插件。
感谢您的帮助!
您使用的是什么版本的节点? setsid 曾经在文档中,但被一个分离的选项所取代。
https://nodejs.org/api/child_process.html#child_process_options_detached
我正在尝试在 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});
但是我仍然收到消息 "no job control in this 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++ 插件。
感谢您的帮助!
您使用的是什么版本的节点? setsid 曾经在文档中,但被一个分离的选项所取代。
https://nodejs.org/api/child_process.html#child_process_options_detached