【发布时间】:2020-08-12 12:15:23
【问题描述】:
我有最基本的 Fortran 程序:
program sleep
print*, "Sleeping"
call sleep(30)
print*, "Done"
end program sleep
我使用gfortran sleep.f90(版本 9.3.0)编译。根据我从sleep 文档中了解到的情况,该程序应该休眠 30 秒,即我应该期望在“休眠”后 30 秒看到“完成”打印。这不会发生:我看到两个打印语句都立即出现,这表明 call sleep(30) 不会以任何方式阻止我的程序。做call sleep(10000) 没有任何区别。我正在 Linux 的 Windows 子系统 (WSL Ubuntu 20.04) 上编译和运行这个程序。
【问题讨论】:
-
您使用什么操作系统?试试
30000甚至30000000,会发生什么? -
@roygvib 这个问题似乎与您链接的第一个问题(关于 WSL 上的睡眠)有关。我已经用Python solution 替换了
/usr/bin/sleep,但不幸的是这不会传播到我的代码中。 Fortran 是否在内部使用/usr/bin/sleep?我可以在 Fortran 中以某种方式重载对sleep的调用吗? -
我认为 Fortran 不使用
/usr/bin/sleep,而是使用一些特定于编译器的库例程。那么,要使用 Python 脚本,也许我们可以使用call system( "sleep.py 7" )等? (其中sleep.py是链接中显示的 Python 脚本。)这似乎适用于我的 mac... -
gfortran 不使用 /usr/bin/sleep。对于您的代码,您可以使用 -fdump-tree-original 选项生成中间代码,这表明 gfortran 调用了库例程
_gfortran_sleep_i4_sub。在真正的类 Unix 操作系统上,此例程调用 sleep(3),它是 C 标准库的一部分。
标签: fortran gfortran windows-subsystem-for-linux