- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
尝试使用 Fortran 中的 execute_command_line 内在函数创建目录时出现运行时错误。 Ifort (18.0.3 20180410) 和 gfortran (4.8.5) 都会出现错误。这是一个最小的例子,无论我使用什么编译标志都会失败:
PROGRAM directory_test
IMPLICIT NONE
INTEGER :: cstat, estat, i, j
CHARACTER(LEN=100) :: cmsg
REAL, DIMENSION(:,:), ALLOCATABLE :: field
INTEGER, PARAMETER :: fieldsize = 80000
allocate(field(fieldsize,fieldsize))
do j=1, fieldsize
do i=1, fieldsize
field(i,j) = real(i+j)
end do
end do
call execute_command_line('mkdir -p newdir', WAIT=.true., EXITSTAT=estat, CMDSTAT=cstat, CMDMSG=cmsg)
write(*,*) 'estat: ', estat
write(*,*) 'cstat: ', cstat
write(*,*) 'cmsg: ', cmsg
END PROGRAM directory_test
输出强度:
Assets :0
统计数据:124
cmsg:提供给 EXECUTE_COMMAND_LINE 的命令无效
输出 gfortran:
房地产:-520880432
国家统计局:1
cmsg:无法获取命令语言解释器的终止状态
问题是:只要数组大小足够小,程序就可以正常运行。对我来说,阈值大约是所用物理内存的一半(如果您想尝试代码,请调整“fieldsize”的值)。如果数组大于该数组,则会发生错误。如果数组较小,则代码执行无误并创建目录。我用来测试的机器都有 2 个物理 CPU 和 128GB-256GB 的 RAM。
我做错了什么?
操作系统:Linux、Opensuse 42.3
外壳:庆典
文件系统:Ext4
编辑:该问题并非“execute_command_line()”独有。尝试对“call system()”做同样的事情,我得到了类似的行为。如果原始方法因运行时错误而失败,则不会创建新目录。在可用 RAM 降至 48GB 的较小/较旧的双插槽机器上进行的其他测试产生了相同的结果。有些失败较早,有些需要程序几乎占用整个物理内存才能失败。不幸的是,我现在没有要测试的单路机器。
最佳答案
因此,EXECUTE_COMMAND_LINE 以及 SYSTEM 内在函数在 Linux 上的实现方式是,进程首先调用 fork() 系统调用,这会创建进程的克隆。然后子进程将调用 exec(),用要执行的新进程替换该进程。
因此,即使第二个 fork 进程在被新的 exec()ed 进程替换之前存在时间非常短,系统仍然需要足够的虚拟内存来用于原始进程和 fork 的子进程。在 Linux 上,如果您具有 super 用户访问权限,则可以使用各种“过度使用”旋钮调整限制(作为物理内存的函数)。
如果可能,解决此问题的一种方法是在分配大量内存之前或释放内存之后调用 EXECUTE_COMMAND_LINE。
关于bash - Fortran execute_command_line 运行时错误,取决于内存消耗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55120720/
尝试使用 Fortran 中的 execute_command_line 内在函数创建目录时出现运行时错误。 Ifort (18.0.3 20180410) 和 gfortran (4.8.5) 都会
我已经写下Fortran代码来计算距离然后排序,但是调用可执行命令有一些问题。 这是代码 program sort implicit none character CN*8,O*7 in
我是一名优秀的程序员,十分优秀!