Files
是否可以避免打開文件?
當我們執行 lsof 來擷取已刪除的文件時,
我們看到以下內容:(範例)
lsof +L1 java 193699 yarn 1760r REG 8,16 719 0 93696130 /grid/sdb/hadoop/hdfs/data/current/PLP-428352611-43.21.3.46-1502127526112/current/path/nbt/dir37/blk_1186014689_112276769.meta (deleted)
儘管文件已刪除,PID 仍在執行的原因是什麼
lsof +L1 | awk '{print $2}' | sort | uniq 193699
有沒有可能避免這種情況?
太長無法發表評論,因此添加為答案:
這是一個保持這些文件打開的 Java 應用程序,所以是的,可以通過使用適當的程式風格和使用對象來避免這種情況:
ObjectOutputStream
//create a Serializable List List lNucleotide = Arrays.asList( "adenine", "cytosine", "guanine", "thymine", "sylicine" ); //serialize the List //note the use of abstract base class references try{ //use buffering OutputStream file = new FileOutputStream("lNucleotide.ser"); OutputStream buffer = new BufferedOutputStream(file); ObjectOutput output = new ObjectOutputStream(buffer); try{ output.writeObject(lNucleotide); } **finally{ output.close(); }** } catch(IOException ex){ logger.log(Level.SEVERE, "**Cannot create Silicon life form.**", ex); }
通過在應用程序級別關閉文件,您將避免此問題。因此,這不是 Unix 或 Linux 做錯任何事情的結果,而是您的應用程序固有的。