如何解决资源不足:open_files 错误

how to resolve not enough resources: open_files error

file_in_directory(File):-
  working_directory(D,D),
  directory_files(D,Entries),
  member(File,Entries).

tree_file_in_directory(File):-
  file_in_directory(File),
  atom_codes('.treeliker',TreeLikerCodes),
  atom_codes(File, FileCode),
  append(_FileStripped,TreeLikerCode,FileCode).

run_tree_liker(File):-
   process_create(path(java), 
   ['-Xmx8gb','-cp', 'TreeLiker.jar', 'ida.ilp.treeLiker.TreeLikerMain','-batch', File], [stdout(pipe(Out)), process(PID)]).

forall(
   tree_file_in_directory(File),
   (
   run_tree_liker(File),
   run_weka(File, Lines)
   )
).

我有一个这样的程序,其中 run_tree_liker/1run_weka/2 使用 process_create/3 到 运行 一个 java jar 程序。第一个程序为目录中的每个 .treeliker 文件创建一个 .arff 文件。 运行 weka 部分然后使用 .arff 文件并向数据库断言一些事实。

目录和程序 运行 中大约有 1400 个 .treeliker 文件,但它总是在大约 400 个之后用 Error: Not enough resources: open_files 切断。如何让程序一次打开一个文件并在进程完成后关闭文件,这样就不会发生此错误?

我需要使用 setup_call_cleanup/3 和 close/1

run_jar(Jar,Option,Lines):-
   setup_call_cleanup(
   process_create(path(java),['-jar',Jar,Option],[stdout(pipe(Out))]),
   read_lines(Out,Lines),
   close(Out)).

感谢邮件列表中的 Jan。