如果包含服务器端代码的文件在执行时被删除会怎样?
What happens if a file with server-side code is deleted while being executed?
如果我编写以下脚本(不只是 php 而是 任何服务器端语言 ):
<?php
while (true)
{
sleep(4)
}
?>
然后我 运行 使用 linux 终端的文件,如下所示: php file.php
问题:如果我删除文件本身会怎样?进程是先存储在ram中,现在不管file.php
存在与否都在执行,进程会突然停止,还是会发生完全不同的事情?
如果它已经是运行,那么它已经被加载到内存中,解析和编译,所以它在内存中是运行....删除文件不会改变... . 这就是编译语言的工作方式,与许多人的看法相反,PHP 是一种编译语言....它在执行时编译,并编译为字节码而不是本地机器码;但仍然被编译
我不确定 Windows,但在基于 Unix 的系统中,以下内容适用:
如果程序(如 php)打开文件描述符(例如通过打开文件和 executing/interpreting 内容),文件将一直存在,直到文件描述符关闭。但是内核会在它被移除后阻止程序获取新的文件描述符,然后在最后一个描述符关闭时删除它"for real"。
在 PHP 的情况下,很可能就像马克在他的回答中所说的那样。 PHP 会一次性消耗整个文件,然后 运行 从内存中消耗。但考虑到上述情况,即使在进程忙于读取文件时删除文件,它仍然可以正常工作。
如果我编写以下脚本(不只是 php 而是 任何服务器端语言 ):
<?php
while (true)
{
sleep(4)
}
?>
然后我 运行 使用 linux 终端的文件,如下所示: php file.php
问题:如果我删除文件本身会怎样?进程是先存储在ram中,现在不管file.php
存在与否都在执行,进程会突然停止,还是会发生完全不同的事情?
如果它已经是运行,那么它已经被加载到内存中,解析和编译,所以它在内存中是运行....删除文件不会改变... . 这就是编译语言的工作方式,与许多人的看法相反,PHP 是一种编译语言....它在执行时编译,并编译为字节码而不是本地机器码;但仍然被编译
我不确定 Windows,但在基于 Unix 的系统中,以下内容适用:
如果程序(如 php)打开文件描述符(例如通过打开文件和 executing/interpreting 内容),文件将一直存在,直到文件描述符关闭。但是内核会在它被移除后阻止程序获取新的文件描述符,然后在最后一个描述符关闭时删除它"for real"。
在 PHP 的情况下,很可能就像马克在他的回答中所说的那样。 PHP 会一次性消耗整个文件,然后 运行 从内存中消耗。但考虑到上述情况,即使在进程忙于读取文件时删除文件,它仍然可以正常工作。