是否可以避免打开文件?

yae*_*ael 0 process rhel ps lsof 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)
Run Code Online (Sandbox Code Playgroud)

尽管文件已经删除,PID仍在运行是什么原因

lsof +L1 | awk '{print $2}' | sort | uniq
193699 
Run Code Online (Sandbox Code Playgroud)

是否有可能避免这种情况?

Fab*_*bby 5

发表评论太长了,所以添加一个答案:

这是一个保持这些文件打开的 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);
}
Run Code Online (Sandbox Code Playgroud)

通过在应用程序级别关闭文件,您将避免这个问题。因此,这不是 Unix 或 Linux 做错任何事情的结果,而是您的应用程序固有的结果。