当两个进程试图同时执行一个perl文件时,“文本文件繁忙”是否会发生?

当我尝试执行一个perl文件,而这个文件当前被另一个进程使用时,我得到了这个消息 – “文本文件繁忙”。

根据这个/ usr / bin / perl:糟糕的解释器:文本文件忙 ,当我尝试执行它时,当perl文件被打开写入时,这个问题发生。

但文件的权限是-r-xr-xr-x。 它不提供写入权限。

当两个进程试图同时执行一个perl文件时,“文本文件繁忙”是否会发生?

Solutions Collecting From Web of "当两个进程试图同时执行一个perl文件时,“文本文件繁忙”是否会发生?"

不,这不会因为两个Perl脚本同时执行而发生。

更可能的解释是脚本本身是开放的,而操作系统正在尝试读取它的脚本行以确定要使用的解释器。

如果外部进程试图升级或修改Perl解释器本身,或者它依赖的共享库之一,也会发生这种情况。 请注意,文件权限通常不适用于超级用户帐户(例如root),所以以超级用户身份运行的任何进程仍然可以尝试修改Perl解释器,尽管没有设置+w位。

(也就是说,在POSIX风格的操作系统上,大多数功能良好的操作系统升级工具都会将二进制文件的升级版本写入同一文件系统中的新文件,完成后关闭该文件,并将其重命名为原子操作) – 这样/usr/bin/perl附加的inode本身是永远不会打开的,因此,在一个行为良好的系统上,你所看到的错误并不是实际应该出现的)。

您可以使用fuser命令来查看谁打开了一个文件,无论是脚本还是其解释器:

 $ sudo fuser /usr/bin/perl -uv USER PID ACCESS COMMAND /usr/bin/perl: root 16579 f.... (root)python 

但文件的权限是-r-xr-xr-x。 它不提供写入权限。

打开脚本进行写入但脚本运行之前,可以设置权限。

这是一个代码示例,在当前目录中写入一个新的perl脚本your-script ,在删除写入权限时使其可执行,并尝试运行perl脚本。 最后的权限是-r-xr-xr-x但是文件仍然是打开的,这就是为什么脚本生成“Text file busy”错误:

 #!/usr/bin/env python3 import os import stat import subprocess file = open('./your-script', 'w') # specify full path try: file.write("#!/usr/bin/perl\nprint 'unreachable';") file.flush() # make sure the content is sent to OS os.chmod(file.name, 0o555) # make executable print(stat.filemode(os.stat(file.name).st_mode)) # -r-xr-xr-x subprocess.call(file.name) # run it except Exception as e: print(e) finally: os.remove(file.name)