如何分离一个Node.js脚本中产生的subprocess?
意图:使用指定参数调用外部应用程序,然后退出脚本。
以下脚本无法正常工作:
#!/usr/bin/node var cp = require('child_process'); var MANFILE='ALengthyNodeManual.pdf'; cp.spawn('gnome-open', ['\''+MANFILE+'\''], {detached: true});
事情尝试: exec
– 不分离。 提前谢谢了
从node.js文档:
默认情况下,父母将等待分离的孩子退出。 为了防止父母等待给定的孩子,使用child.unref()方法,并且父母的事件循环将不包括引用计数中的孩子。
使用分离选项启动长时间运行的进程时,除非提供了未连接到父级的stdioconfiguration,否则该进程将不会保持在后台运行。 如果父母的stdio被inheritance,那么孩子将继续与控制terminal连接。
你需要修改你的代码,如下所示:
#!/usr/bin/node var fs = require('fs'); var out = fs.openSync('./out.log', 'a'); var err = fs.openSync('./out.log', 'a'); var cp = require('child_process'); var MANFILE='ALengthyNodeManual.pdf'; var child = cp.spawn('gnome-open', [MANFILE], { detached: true, stdio: [ 'ignore', out, err ] }); child.unref();
我对这个问题的解决scheme:
app.js
require('./spawn.js')('node worker.js');
spawn.js
module.exports = function( command ) { require('child_process').fork('./spawner.js', [command]); };
spawner.js
require('child_process').exec( 'start cmd.exe @cmd /k "' + process.argv[2] + '"', function(){} ); process.abort(0);
- Mongoose / mongoDB查询连接..但我来自一个SQL背景
- 如何在没有页面重新加载的情况下将任意的JSON发送到node.js?
- 在firebase 3.0.2中的set方法上不执行callback
- 将自定义属性添加到Express应用程序和请求。 什么是最好的方法?
- Mongodb,find一个集合是否为空,node.js
- 如何使用Node.js在MongoDB中查找logging
- 如何findJavaScript对象之间的共同属性
- 错误:无法将用户序列化到会话中。 错误的函数传递给serializeUser()?
- Express.js:如何在req.param中创buildapp.get('/ i'..)?