lab1 遇到的问题

1.qemu-system-riscv64: -device virtio-blk-device,drive=x0,bus=virtio-mmio-bus.0: Failed to get “write” lock Is another process using the image [fs.img]? make: *** [Makefile:209:qemu] 错误 1

笔者在做MIT 6.S081时碰到的报错

这个错误信息表示 QEMU 在尝试访问磁盘映像文件 fs.img 时无法获取写锁,这通常意味着该映像文件正在被另一个进程使用。以下是一些解决该问题的建议:

  1. 检查正在运行的进程: 使用以下命令检查是否有其他 QEMU 实例或进程正在使用 fs.img:

    1
    lsof fs.img

    这将列出所有打开该文件的进程。

  2. 杀死冲突进程: 如果发现有进程正在使用该文件,可以选择杀死它们:

    1
    kill <PID>

    替换为实际的进程号。

  3. 确保 QEMU 不在后台运行: 确保没有任何 QEMU 的后台进程在运行,可以通过以下命令结束所有 QEMU 进程(注意:这将停止所有 QEMU 实例):

    1
    pkill qemu-system-riscv64
  4. 复制文件进行测试: 如果你不想终止其他进程,可以尝试复制 fs.img 文件并在新副本上运行 QEMU:

    1
    cp fs.img fs_copy.imgqemu-system-riscv64 -drive file=fs_copy.img,if=virtio ...
  5. 检查文件权限: 确保你对 fs.img 文件有适当的读/写权限。你可以使用 ls -l fs.img 检查权限,并使用 chmod 修改它们。

  6. 重启系统: 如果问题仍然存在,可以考虑重启系统以释放文件锁。

建议直接重启虚拟机,一了百了

2.当你在运行一个 Python 脚本时遇到错误:/usr/bin/env: “python”: 没有那个文件或目录

这个错误通常表明系统无法找到名为 python 的可执行文件。这可能是因为以下几种原因:

1. Python 没有安装

你可以检查 Python 是否已安装在你的系统上。在终端中输入以下命令:

bash

1
python --version

或者

bash

1
python3 --version

如果系统提示 python 未找到,说明可能没有安装 Python。你可以根据你的操作系统使用相应的命令进行安装。

对于 Ubuntu/Debian 系统:

bash

1
sudo apt updatesudo apt install python3

对于 CentOS/Fedora 系统:

bash

1
sudo yum install python3

2. Python 的命名问题

在某些系统上(尤其是较新的系统),python 命令可能指向 Python 2.x,而 python3 命令指向 Python 3.x。在这种情况下,你可以修改脚本的 shebang 行来使用 python3。找到脚本开头的 shebang 行(通常是第一行),并更改如下:

bash

1
#!/usr/bin/env python3

3. 确认 Python 的可执行路径

你可以使用以下命令检查 Python 的安装路径并确保它在 PATH 环境变量中:

bash

1
which python

或者

bash

1
which python3

如果没有输出,说明 Python 不在你的 PATH 中,可能需要创建一个符号链接或手动将 Python 添加到你的 PATH。

4. 使用虚拟环境

如果你使用虚拟环境,确保你在激活虚拟环境后再运行脚本。激活虚拟环境后,使用下面的命令:

bash

1
source your_virtual_env/bin/activate

解决步骤

  1. 确保 Python 已安装。
  2. 检查 python 和 python3 是否在 PATH 中。
  3. 如果 Python 安装正确但依然遇到问题,请尝试修改脚本的 shebang 行。
  4. 如果使用虚拟环境,确保已激活它。

笔者是python3,所以把#!/usr/bin/env python改成#!/usr/bin/env python3就好了

3.Primes(素数,难度:Moderate/Hard)中的无限递归

那就在递归函数前加个

_attribute_((noreturn)) 就行