File: twaitforexit.nim

package info (click to toggle)
nim 2.2.0-1
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 1,911,644 kB
  • sloc: sh: 24,603; ansic: 1,761; python: 1,492; makefile: 1,013; sql: 298; asm: 141; xml: 13
file content (38 lines) | stat: -rw-r--r-- 1,214 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
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)