我正在尝试在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});
但是,我仍然收到消息“此外壳中无作业控制”。
分配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
关于node.js - 等效的Node.js setsid(),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32123867/