我试图在nodejs中执行bash shell - 除了作业控制之外我一直在工作。我很确定这是因为生成的流程没有设置为流程负责人。在C中,我能够通过调用setsid()来做到这一点。在nodejs中,我读到等效的是设置选项' setsid:true'当产生新的过程时。我是这样做的:
NSString *testNil = nil;
NSString *testEmpty = @"";
NSString *testNonEmpty = @"Hello";
NSInteger testNilLength = [testNil length]; // -> 0
NSInteger testEmptyLength = [testEmpty length]; // -> 0
NSInteger testNonEmptyLength = [testNonEmpty length]; // -> 5
但是我仍然收到消息"此shell中没有作业控制"。
分配pty ttys002之后的示例输出:
var child = spawn('/bin/bash', ['--login'], {stdio: [this.slave, this.slave, this.slave], env: {"TERM": "vt100"}, setsid: true});
总而言之,我的问题是:
- 这是设置新流程会话ID的正确方法吗?如果是这样,我如何明确地检查它是否确实正确地做到了(因为在我看来它似乎不是 - 这是我想象的唯一会导致没有工作控制的事情,因为tty命令是证据pty设置正确)。
- 如果这种方法不起作用,是否有任何替代的setsid()不涉及下载模块?如果没有,我会写一个c ++插件。
谢谢你的帮助!
答案 0 :(得分:2)
您使用的是哪个版本的节点? setsid曾经在文档中,但被替换为分离选项。
https://nodejs.org/api/child_process.html#child_process_options_detached