为什么我们不能删除正在运行的可执行文件

伊夫

众所周知,当我们执行一个可执行文件时,该文件将被加载到RAM中。

所以我想我可以rm a.exe之后./a.exe

我认为,执行后./a.exe,此文件已加载到RAM中,因此我应该能够将其从硬盘驱动器中删除。我用一个例子做一个简单的测试:

#include <iostream>
#include <thread>
#include <chrono>

int main()
{
        while (true)
        {
                std::cout<<"hello world"<<std::endl;
                std::this_thread::sleep_for(std::chrono::milliseconds(2000));
        }
        return 0;
}

我编译并执行了代码,我看到hello world不断弹出。

然后,我删除了可执行文件,并且hello world仍然不断弹出。

因此,我认为我可以在运行时删除可执行文件。

但是今天,我试图对另一个C ++项目做同样的事情,并且在删除可执行文件后,它崩溃了。

为什么?哪种原因会导致飞机坠毁?

尤里·贡查鲁克(Yurij Goncharuk)

同意@ ctrl-alt-delor。

我继续。也许对某人会有帮助:

程序加载

当系统创建或扩展过程映像时,它将逻辑上将文件的段复制到虚拟内存段。系统何时(以及是否)以物理方式读取文件取决于程序的执行行为,系统负载等。

来源:第三册:特定于操作系统(UNIX System V发行版4)

因此,程序不必完全加载到RAM中。


当某些文件在其他程序打开后被删除并映射后,在程序运行期间将始终可访问该文件。发生这种情况是因为rm仅删除了索引节点条目,但引用了映射的(map)内存的文件描述符将一直存在,直到对其进行编程unmapclose文件描述符为止因此,如果OS运行(exec)一些程序,则OS可能(更可能是)map可执行文件。最后,通过rm在执行程序时删除文件,不会执行缩进。


PS map或可执行文件段的完整副本的行为也取决于可执行文件的格式。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

删除正在运行的可执行文件

来自分类Dev

在Windows上,为什么不能覆盖正在运行的应用程序的可执行文件?

来自分类Dev

如果我们可以在64位Windows上运行32位可执行文件,为什么不能转换它?

来自分类Dev

如果我们可以在64位Windows上运行32位可执行文件,为什么不能将其转换?

来自分类Dev

Windows在运行时删除make可执行文件。为什么?

来自分类Dev

覆盖正在运行的可执行文件或.so

来自分类Dev

为什么CLion可以正确构建和链接Qt,但不能运行我的可执行文件?

来自分类Dev

XORing可执行文件时,为什么我的XOR程序不能在Windows上运行

来自分类Dev

为什么在运行可执行文件时需要在前面添加./?

来自分类Dev

为什么运行“错误”的可执行文件?

来自分类Dev

为什么我不能使用gcc生成“ Hello World”可执行文件?

来自分类Dev

如何恢复正在运行的进程被删除的二进制可执行文件

来自分类Dev

为什么工作目录是可执行文件的目录,而不是我从那里运行的目录?

来自分类Dev

为什么Git Bash无法运行我的可执行文件?

来自分类Dev

正在运行的可执行文件:无此类文件或目录

来自分类Dev

为什么当我尝试运行可执行文件时,该可执行文件会说它不存在?

来自分类Dev

如何确定您正在运行最新的可执行文件?

来自分类Dev

PHP检查可执行文件是否正在运行

来自分类Dev

PowerShell查找当前正在运行的主机的路径(PowerShell可执行文件)

来自分类Dev

午夜指挥官:用户正在运行命令或脚本/可执行文件

来自分类Dev

如何获取Linux中正在运行的进程的完整可执行文件名

来自分类Dev

查找*可执行文件位于当前正在运行的进程的位置

来自分类Dev

如何知道正在运行的可执行文件的路径?

来自分类Dev

如何在Linux上列出可执行文件的所有正在运行的实例?

来自分类Dev

Qt5更改当前正在运行的可执行文件的软链接

来自分类Dev

如何确定您正在运行最新的可执行文件?

来自分类Dev

AIX:更改正在运行的程序的可执行文件

来自分类Dev

为什么我不能在Linux上执行Android x86可执行文件

来自分类Dev

为什么我的64位可执行文件比32位可执行文件大3倍?

Related 相关文章

  1. 1

    删除正在运行的可执行文件

  2. 2

    在Windows上,为什么不能覆盖正在运行的应用程序的可执行文件?

  3. 3

    如果我们可以在64位Windows上运行32位可执行文件,为什么不能转换它?

  4. 4

    如果我们可以在64位Windows上运行32位可执行文件,为什么不能将其转换?

  5. 5

    Windows在运行时删除make可执行文件。为什么?

  6. 6

    覆盖正在运行的可执行文件或.so

  7. 7

    为什么CLion可以正确构建和链接Qt,但不能运行我的可执行文件?

  8. 8

    XORing可执行文件时,为什么我的XOR程序不能在Windows上运行

  9. 9

    为什么在运行可执行文件时需要在前面添加./?

  10. 10

    为什么运行“错误”的可执行文件?

  11. 11

    为什么我不能使用gcc生成“ Hello World”可执行文件?

  12. 12

    如何恢复正在运行的进程被删除的二进制可执行文件

  13. 13

    为什么工作目录是可执行文件的目录,而不是我从那里运行的目录?

  14. 14

    为什么Git Bash无法运行我的可执行文件?

  15. 15

    正在运行的可执行文件:无此类文件或目录

  16. 16

    为什么当我尝试运行可执行文件时,该可执行文件会说它不存在?

  17. 17

    如何确定您正在运行最新的可执行文件?

  18. 18

    PHP检查可执行文件是否正在运行

  19. 19

    PowerShell查找当前正在运行的主机的路径(PowerShell可执行文件)

  20. 20

    午夜指挥官:用户正在运行命令或脚本/可执行文件

  21. 21

    如何获取Linux中正在运行的进程的完整可执行文件名

  22. 22

    查找*可执行文件位于当前正在运行的进程的位置

  23. 23

    如何知道正在运行的可执行文件的路径?

  24. 24

    如何在Linux上列出可执行文件的所有正在运行的实例?

  25. 25

    Qt5更改当前正在运行的可执行文件的软链接

  26. 26

    如何确定您正在运行最新的可执行文件?

  27. 27

    AIX:更改正在运行的程序的可执行文件

  28. 28

    为什么我不能在Linux上执行Android x86可执行文件

  29. 29

    为什么我的64位可执行文件比32位可执行文件大3倍?

热门标签

归档