Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/41.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
node.js中的子进程在同步代码行之间神秘退出_Node.js_Asynchronous_Child Process - Fatal编程技术网

node.js中的子进程在同步代码行之间神秘退出

node.js中的子进程在同步代码行之间神秘退出,node.js,asynchronous,child-process,Node.js,Asynchronous,Child Process,node.js中的子进程有一个奇怪的问题,我有一些代码在这样的子进程中运行,但是子进程在同步代码行之间退出,代码为0。 var fs = require('fs'); var http = require('http'); var mkdirp = require('mkdirp'); var urlPath = __dirname + "\\urls.txt"; var savePath = __dirname + "\\"; var objects = []; var globalI =

node.js中的子进程有一个奇怪的问题,我有一些代码在这样的子进程中运行,但是子进程在同步代码行之间退出,代码为0。

var fs = require('fs');
var http = require('http');
var mkdirp = require('mkdirp');


var urlPath = __dirname + "\\urls.txt";
var savePath = __dirname + "\\";
var objects = [];
var globalI = 0;

var file;

if (!fs.existsSync(urlPath))
{
    console.log("File at " + urlPath + " does not exist!");
}
else 
{
    if(!fs.existsSync(savePath)){
        mkdirp.sync(savePath);
    }

    console.log("File found! Reading...");
    console.log("still running");

    try{
        var data = fs.readFileSync(urlPath, {"encoding":"utf8"});
    } catch (err) {
        console.log("Error reading url file...");
        throw err;
    } finally {
        console.log("File read!");
        var array = data.split("\n");

        console.log("Found " + array.length + " urls");
    }
线路

console.log("File found! Reading...");
运行并显示在控制台中。然而,下一行

console.log("still running");
不跑。子进程在该行代码之前退出。我完全不知道为什么。任何洞察都将不胜感激

另外,如果我更改这两条语句的顺序,它在退出之前仍然只执行第一条语句

编辑

所以,也许它确实与冲洗和其他臭虫有关。如果我删除这两条连续的日志语句,它将在
finally
块中运行下一条日志语句,然后退出

EDIT2

关于这个问题还有其他一些奇怪的地方。您可以在代码片段中看到我有一个名为
globalI
稍后在代码中,该变量会简单地递增,就像
globalI++
如果取消对增量的注释,子进程将意外停止退出,但这毫无意义,因为它甚至从未接近增量意外退出时发生的行


这就是我开始有这个问题的原因。我完全震惊了

你终于错过了一个}之后,但我非常严重地怀疑这与此有关,可能只是一个复制过去的错误

在我看来,在刷新stdout之前,您可能已经退出了该程序。以前有一个flush调用,您可以在较旧的节点版本中显式地进行,但现在不行了

阅读这篇文章,人们与你的问题非常相似:

这似乎很难相信,因为在此之后您正在进行readFileSync调用,但我认为这仍然是可能的

要测试它,您可以做的一件事就是在两次写入之前设置一个超时,比如5秒。这将使程序保持5秒钟的活动状态,超过清除任何控制台日志的足够时间

...
setTimeout(function() { console.log("Timeout!!");  }, 5000);
console.log("File found! Reading...");
console.log("still running");
...
如果两条线都成功了,那么你就知道你有时间问题。如果在那之后它仍然被破坏,至少你可以消除时间问题

也许你不知何故得到了一个未处理的错误。您可以将以下代码放入并查看是否触发:

process.on('uncaughtException', function (err) {
  console.error('uncaught: ' + err);
});

@我不确定,但我不认为这是我的问题。文件中还有其他无法执行的同步命令。我同意你的观点,我认为如果不是不可能的话,很难相信这是我的错误。还有许多其他同步命令没有在文件中进一步运行。我在log语句之前直接添加了
setTimeout
代码行,它可能会运行,但不会结束,因为它从不打印
Timeout仍与以前一样,它打印仍在运行的
,然后以代码0退出。另外,
process.on('uncaughtException')
没有捕获任何内容。我在原始问题中添加了一个编辑,这可能会有所帮助