Files

是否可以避免打開文件?

  • January 14, 2019

當我們執行 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 做錯任何事情的結果,而是您的應用程序固有的。

引用自:https://unix.stackexchange.com/questions/494287