在Python中调用os.unlink(_文件__)安全吗?

在Python中调用os.unlink(_文件__)安全吗?,python,linux,Python,Linux,我正在linux上使用Python 2.6 我有一个run.py脚本,它在后台启动多个服务,并生成kill.py来终止这些进程 在kill.py中,当它完成工作时,是否可以安全地断开自身链接 import os # kill services os.unlink(__file__) # is it safe to do something here? 我是Python新手。我担心的是,由于Python是一种脚本语言,所以整个脚本可能不在内存中。在解除链接后,将不会有进一步的代码进行解释 我试过

我正在linux上使用Python 2.6

我有一个run.py脚本,它在后台启动多个服务,并生成kill.py来终止这些进程

在kill.py中,当它完成工作时,是否可以安全地断开自身链接

import os
# kill services
os.unlink(__file__)
# is it safe to do something here?
我是Python新手。我担心的是,由于Python是一种脚本语言,所以整个脚本可能不在内存中。在解除链接后,将不会有进一步的代码进行解释

我试过这个小测试

import os
import time
time.sleep(10)       # sleep 1
os.unlink(__file__)
time.sleep(10)       # sleep 2
当运行这个文件时,我运行了
stat kill.py
,链接数始终为1,所以我猜Python解释器没有保存到该文件的链接


作为一个更高层次的问题,创建一个稍后很容易终止的进程列表的通常方法是什么?

Python读取整个源文件,并在执行之前对其进行编译,因此您不必担心删除或更改正在运行的脚本文件。

只需不调用

Python不需要对文件持有锁,因为它们是在导入时编译和加载的。实际上,在程序运行时交换文件的功能通常非常有用。

IIRC(!):当on*nix时,取消链接只会删除文件系统中的名称,当最后一个文件句柄关闭时,inode会被删除。因此,除了python试图重新打开文件外,这不会导致任何问题

作为一个更高层次的问题,创建稍后容易终止的进程列表的通常方法是什么


我将把PID放在一个
列表中
,然后用
os.kill
对其进行迭代。我不明白你为什么要为此创建和执行一个新脚本。

如果可以避免的话,不要让你的脚本编写新脚本——只需写出一个PID列表,然后通过它们。 现在还不清楚你想做什么,但是创建和删除脚本听起来太脆弱了

要回答这个问题: Python编译所有源代码并在执行之前关闭文件,因此这是安全的

通常,在Linux上,解除打开文件的链接是安全的。(但并非无处不在:在Windows上,无法删除正在使用的文件。)


请注意,当您导入模块时,Python 2会将其编译成
.pyc
字节码文件并对其进行解释。如果删除
.py
文件,Python仍将使用
.pyc
,反之亦然。

如果在Linux上删除一个文件,该文件仍然存在,只要至少有一个打开的文件句柄。它不再存在于目录中,但
lsof
仍显示为已删除。这个机制是用于临时文件的。我在发布后才看到。然而,我不想删除我的答案。