NodeJS fs.unlink()没有释放文件句柄

时间:2018-01-30 19:22:56

标签: node.js linux

我正在使用以下调用删除在Linux(RHEL)上运行的nodeJS应用程序中的现有文件。

fs.unlink(downloadsFolder + '/' + file)

然而,几天后我注意到文件仍然在系统中,因为文件句柄没有被释放。我重新启动了节点服务器,这些文件最终消失了。如何以编程方式解决此问题?

dzdo lsof -L | grep -i deleted

node  48782  root 600743243   403197165 /mnt/downloads/file_1516312894734.csv (deleted)
node  48782  root 14999       403197166 /mnt/downloads/file_1516729327306.csv (deleted)

我也在fs.unlink()的日志中收到此警告,这会导致它吗?

(node:48782) [DEP0013] DeprecationWarning: Calling an asynchronous function without callback is deprecated.

1 个答案:

答案 0 :(得分:0)

正如警告所说,fs.unlink方法是asynchronous,这意味着你必须提供一个在删除操作完成时执行的回调函数:

fs.unlink(downloadsFolder + '/' + file, (err) => {
    if (err) throw err;
    console.log('File successfully deleted');
});

或者您可以使用fs.unlink的同步版本:

fs.unlinkSync(downloadsFolder + '/' + file);