mirror of
https://github.com/nim-lang/Nim.git
synced 2026-01-04 12:07:51 +00:00
#23992 The test case provided does not cover the Windows situation, I fixed it in this new PR. Fixed an issue where errorCode was always 0 when startProcess didn't use the poEvalCommand flag. Tthe sleep command might not be available in all Windows installations, so I skipped the relevant test. Added a test case, tested on my fedora and windows systems.
39 lines
1.2 KiB
Nim
39 lines
1.2 KiB
Nim
import std/[osproc, os, times]
|
|
|
|
block: # bug #5091
|
|
when defined(linux):
|
|
const filename = "false"
|
|
var p = startProcess(filename, options = {poStdErrToStdOut, poUsePath})
|
|
os.sleep(1000) # make sure process has exited already
|
|
|
|
let atStart = getTime()
|
|
const msWait = 2000
|
|
|
|
try:
|
|
discard waitForExit(p, msWait)
|
|
except OSError:
|
|
discard
|
|
|
|
# check that we don't have to wait msWait milliseconds
|
|
doAssert(getTime() < atStart + milliseconds(msWait))
|
|
|
|
block: # bug #23825
|
|
|
|
# the sleep command might not be available in all Windows installations
|
|
|
|
when defined(linux):
|
|
|
|
var thr: array[0..99, Thread[int]]
|
|
|
|
proc threadFunc(i: int) {.thread.} =
|
|
let sleepTime = float(i) / float(thr.len + 1)
|
|
doAssert sleepTime < 1.0
|
|
let p = startProcess("sleep", workingDir = "", args = @[$sleepTime], options = {poUsePath, poParentStreams})
|
|
# timeout = 1_000_000 seconds ~= 278 hours ~= 11.5 days
|
|
doAssert p.waitForExit(timeout=1_000_000_000) == 0
|
|
|
|
for i in low(thr)..high(thr):
|
|
createThread(thr[i], threadFunc, i)
|
|
|
|
joinThreads(thr)
|