File: tosprocterminate.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 (44 lines) | stat: -rw-r--r-- 1,076 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
39
40
41
42
43
44
discard """
  cmd: "nim $target $options -r $file"
  targets: "c cpp"
  matrix: "--mm:refc; --mm:orc"
"""

import os, osproc, times, std / monotimes
import std/assertions

when defined(windows):
  const ProgramWhichDoesNotEnd = "notepad"
elif defined(openbsd):
  const ProgramWhichDoesNotEnd = "/bin/cat"
else:
  const ProgramWhichDoesNotEnd = "/bin/sh"

echo("starting " & ProgramWhichDoesNotEnd)
var process = startProcess(ProgramWhichDoesNotEnd)
sleep(500)
echo("stopping process")
process.terminate()
var TimeToWait = 5000
while process.running() and TimeToWait > 0:
  sleep(100)
  TimeToWait = TimeToWait - 100

doAssert not process.running()
echo("stopped process")

process.close()

echo("starting " & ProgramWhichDoesNotEnd)
process = startProcess(ProgramWhichDoesNotEnd)
echo("process should be stopped after 2s")

let start = getMonoTime()
discard process.waitForExit(2000)
let took = getMonoTime() - start

doAssert not process.running()
# some additional time to account for overhead
doAssert took < initDuration(seconds = 3)

echo("stopped process after ", took)