不要在命令行参数中使用&(和号)。它由shell使用,而不是python。在
使用{detached: true}选项,这样当您的节点进程退出时,它将能够继续运行:var spawn = require("child_process").spawn;
var p = spawn("python", ["/path/to/test.py"], {detached: true});
如果您还想gnore它的输出,请使用{stdio: 'ignore'}
^{pr2}$
另外,我不会将变量命名为process,因为它由node使用:The process object is a global that provides information about, and
control over, the current Node.js process. As a global, it is always
available to Node.js applications without using require().
更新
如果仍然无法退出,请尝试添加:p.unref();
对于您的程序,其中p是spawn返回的内容:var spawn = require("child_process").spawn;
var p = spawn("python", ["/path/to/test.py"], {detached: true, stdio: 'ignore'});
p.unref();
更新2
下面是一个示例shell会话-如何运行它,测试它是否有效并终止它:$ cat parent.js
var spawn = require("child_process").spawn;
var fs = require("fs");
var p = spawn("sh", ["child.sh"], {detached: true, stdio: 'ignore'});
p.unref();
$ cat child.sh
#!/bin/sh
sleep 60
$ node parent.js
$ ps x | grep child.sh
11065 ? Ss 0:00 sh child.sh
11068 pts/28 S+ 0:00 grep child.sh
$ kill 11065
$ ps x | grep child.sh
11070 pts/28 S+ 0:00 grep child.sh
$