【问题标题】:Why does a recursive Python program not crash my system?为什么递归 Python 程序不会使我的系统崩溃?
【发布时间】:2022-08-03 13:03:09
【问题描述】:

我写了一个py包含以下两行的脚本:

import os

os.system(\"python3 R.py\")

我预计我的系统在运行此脚本几分钟后会耗尽内存,但它的响应速度仍然令人惊讶。有人知道,这里发生了什么样的 Python 解释器魔法?

  • 您使用的是什么操作系统?你用的是什么版本的python?
  • 出于显而易见的原因,我很犹豫是否要亲自尝试,但是您可以使用ps 查看您的机器上实际运行了多少 Python 解释器吗?
  • 内存方面,如果您的机器使用 fork-on-write,则每个进程将共享相同的内存,直到它实际尝试写入自己的地址空间。这里使用的唯一资源可能是进程表中的条目(我本以为会很快填满)。
  • 它的可能的“最后一个”进程上的os.system 刚刚阻塞,直到操作系统允许派生更多进程。
  • 在 Windows 10 上,当使用任务管理器查看进程时,从我的硬件几秒钟开始,它就用这两行创建了 150 多个相同脚本的进程。通过添加print(os.getpid()) 可以看出它们都是不同的进程。

标签: python python-3.x recursion operating-system


【解决方案1】:

os.system 实际上是对 C 的 system 的调用。

它正在分叉一个子进程,成功执行并退出。只要有可用的资源,人们就会期望它会运行。

参考

https://pubs.opengroup.org/onlinepubs/9699919799/functions/system.html

【讨论】:

    猜你喜欢
    • 2022-01-13
    • 1970-01-01
    • 2017-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-24
    • 1970-01-01
    相关资源
    最近更新 更多