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

时间:2016-05-24 11:02:25

标签: java php python terminal server-side

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

<?php
  while (true)
  {
      sleep(4)
  }
?>

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

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

2 个答案:

答案 0 :(得分:1)

如果它已经运行,那么它已经被加载到内存中,进行了解析和编译,因此它在内存中运行....删除文件不会改变这就是编译语言的工作方式,与许多人的观点相反,PHP是一种编译语言......它在执行时编译,编译为字节码而不是本机编码机器码;但仍然编译

答案 1 :(得分:0)

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

如果程序(如php)打开文件描述符(例如通过打开文件并执行/解释内容),文件将保持存在,直到文件描述符关闭。但是,内核会阻止程序在删除后获取新的文件描述符,然后删除它&#34; for real&#34;当最后一个描述符关闭时。

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

有关详细信息,请参阅以下手册页:unlink(2)open(2)