There's a [progress](https://github.com/euantorano/progress.nim) module in nimble:
`nimble install progress` Here's a (very crude) example of using it with spawn: # https://github.com/euantorano/progress.nim import os, strutils, progress, threadpool const dumpFileTargetMb = 20_000 dumpFileName = getTempDir() / "dumpfile.tmp" dumpFileTargetBytes = dumpFileTargetMb * 1024 * 1024 proc prepare() = discard tryRemoveFile(dumpFileName) setControlCHook( proc() {.noconv.} = echo "\n\n Terminated! \n\n" quit(1) ) echo "Filling up $1 to $2mb..." % [dumpFileName, $dumpFileTargetMb] proc createDumpFile() = const pageSize = 4096 buffer = ' '.repeat(pageSize) pagesTotal = dumpFileTargetBytes div pageSize var output = open(dumpFileName, fmWrite, pageSize) for pageNum in 1..pagesTotal: output.write buffer output.flushFile output.close proc watchDumpFileGrow() = var bar = newProgressBar(dumpFileTargetBytes) currentDumpFileBytes = 0 bar.start() while true: sleep(100) try: currentDumpFileBytes = getFileSize(dumpFileName).int except OSError: continue if currentDumpFileBytes >= dumpFileTargetBytes: bar.finish() break else: bar.set currentDumpFileBytes when isMainModule: prepare() spawn createDumpFile() watchDumpFileGrow() # Or this should also work: # spawn watchDumpFileGrow() # createDumpFile() Run