Java 如果在执行时删除了带有服务器端代码的文件,会发生什么情况?

Java 如果在执行时删除了带有服务器端代码的文件,会发生什么情况?,java,php,python,terminal,server-side,Java,Php,Python,Terminal,Server Side,如果我编写以下脚本(不仅仅是用php编写,而是用任何服务器端语言编写): 然后我用linux终端运行该文件,如下所示:php file.php 问题:如果删除文件本身会发生什么?如果进程首先存储在ram中,现在不管是否存在file.php,它都在执行,那么进程会突然停止,还是会发生完全不同的事情?如果它已经在运行,那么它已经被加载到内存中,经过解析和编译,所以它正在内存中运行。。。。删除文件不会改变这一点。。。。编译语言就是这样工作的,与许多人的观点相反,PHP是一种编译语言。。。。它在执行

如果我编写以下脚本(不仅仅是用php编写,而是用任何服务器端语言编写):


然后我用linux终端运行该文件,如下所示:
php file.php


问题:如果删除文件本身会发生什么?如果进程首先存储在ram中,现在不管是否存在
file.php
,它都在执行,那么进程会突然停止,还是会发生完全不同的事情?

如果它已经在运行,那么它已经被加载到内存中,经过解析和编译,所以它正在内存中运行。。。。删除文件不会改变这一点。。。。编译语言就是这样工作的,与许多人的观点相反,PHP是一种编译语言。。。。它在执行时编译,编译成字节码而不是本机代码;但是仍然是编译而非编译的

我不确定Windows,但在基于Unix的系统中,以下情况适用:

如果一个程序(如php)打开了一个文件描述符(例如,通过打开文件并执行/解释内容),该文件将一直存在,直到文件描述符关闭。但是,内核将阻止程序在删除新的文件描述符后获取新的文件描述符,然后在关闭最后一个描述符时“真正地”删除它

就PHP而言,这很可能就像Mark在回答中所说的那样。PHP将一次性使用整个文件,然后从内存运行。但鉴于上述情况,即使在进程忙于读取文件时删除该文件,它也可以正常工作


有关更多信息,请参阅以下手册页:

我认为无法删除已使用的文件。但是你为什么不尝试呢it@Jens我计划在一周内在我的笔记本电脑上安装一个LAMP stack(XAMPP)时尝试一下。到目前为止,我还没有一个沙箱可以玩。不过,了解后端发生的事情会很酷,这也是问题的目的:
发生的事件顺序是什么?
。即使在执行了测试之后,我怀疑结果是否足以推断正在发生的一切。
<?php
  while (true)
  {
      sleep(4)
  }
?>