POSIXct对象相减单位异常求助:计时结果与实际耗时不符
问题原因及解决办法
核心原因:system()未等待进程完成
你运行的复杂脚本大概率是在后台执行的(比如命令末尾加了&,或者脚本内部用了nohup、disown这类让进程后台运行的逻辑)。这种情况下,system()函数只会启动进程就立刻返回,不会等脚本跑完,所以end - start算出来的只是启动进程的瞬间耗时,不是脚本实际运行的1.8小时。而/bin/sleep 2是前台执行,system()会一直等它结束,所以计时正常。验证方式
检查你的./something_complicated_that_takes_a_while命令或脚本内容,确认是否存在后台运行的设置。修复方案
要让system()等待进程结束再返回,有几种办法:- 如果命令末尾加了
&,直接去掉,让进程前台运行 - 修改脚本,移除内部的后台运行逻辑
- 如果必须后台启动,在命令后加
wait强制等待:start <- Sys.time() system("./something_complicated_that_takes_a_while & wait") end <- Sys.time() cat(end - start, "seconds\n")
- 如果命令末尾加了
内容的提问来源于stack exchange,提问作者Taylor
相关产品推荐
相关产品推荐

