child_process 在 Windows 上启动的监控进程出现问题
Problems with monitoring processes launched by child_process spawn on Windows
我的目的只是使用 node.js 启动一个 exe。如果应用程序意外终止,则应捕获异常并将其记录在协议中。在 C++ 项目中通过以下语句抛出异常:
throw std::string("NOT X or x!!!");
我的Javascript是:
var spawn = require('child_process').spawn;
var cp = spawn(process.env.comspec, ['/c', 'myExcepTest.exe', '', '']);
// **doesn't work**
cp.on('uncaughtException', function(err){
console.log("Caught exception: " + err);
});
cp.stderr.on('error', function(err) {
console.log(err.toString());
});
cp.stdin.resume();
cp.stdin.setEncoding('utf8');
cp.stdin.on('data', function(data) {
cp.stdout.write(data);
});
// **does work**
cp.on('exit', function(code){
console.log("Child exited with code: " + code);
});
cp.stdout.on('data', function(data) {
console.log(data.toString());
});
我的问题是:
使用 node.js 监视进程是否是一个好习惯
windows?
是否可以使用 node.js 捕获异常
windows?
如何在 node.js 中正确地将标准输入通过管道传输到标准输出
脚本?
抱歉我的英语不好 ;)
- 取决于你为什么要监视我想的过程。
- 子进程没有
uncaughtException
。原因是没有标准的方法来捕捉这些东西,考虑到子进程可以是任何类型的程序。
- 您不能将子进程的
stdin
传送到它自己的 stdout
,因为 stdin
is a Writable stream 是子进程的输入(不是它的输出) , 所以 stdin
永远不会有 data
事件。
我的目的只是使用 node.js 启动一个 exe。如果应用程序意外终止,则应捕获异常并将其记录在协议中。在 C++ 项目中通过以下语句抛出异常:
throw std::string("NOT X or x!!!");
我的Javascript是:
var spawn = require('child_process').spawn;
var cp = spawn(process.env.comspec, ['/c', 'myExcepTest.exe', '', '']);
// **doesn't work**
cp.on('uncaughtException', function(err){
console.log("Caught exception: " + err);
});
cp.stderr.on('error', function(err) {
console.log(err.toString());
});
cp.stdin.resume();
cp.stdin.setEncoding('utf8');
cp.stdin.on('data', function(data) {
cp.stdout.write(data);
});
// **does work**
cp.on('exit', function(code){
console.log("Child exited with code: " + code);
});
cp.stdout.on('data', function(data) {
console.log(data.toString());
});
我的问题是:
使用 node.js 监视进程是否是一个好习惯 windows?
是否可以使用 node.js 捕获异常 windows?
如何在 node.js 中正确地将标准输入通过管道传输到标准输出 脚本?
抱歉我的英语不好 ;)
- 取决于你为什么要监视我想的过程。
- 子进程没有
uncaughtException
。原因是没有标准的方法来捕捉这些东西,考虑到子进程可以是任何类型的程序。 - 您不能将子进程的
stdin
传送到它自己的stdout
,因为stdin
is a Writable stream 是子进程的输入(不是它的输出) , 所以stdin
永远不会有data
事件。