1234567891011121314151617181920212223242526272829303132333435 |
- # Monitor a client process and shutdown the current process, if the client
- # process is found to be dead
- import os
- when defined(posix):
- import posix_utils
- import posix
- when defined(windows):
- import winlean
- when defined(posix):
- proc monitorClientProcessIdThreadProc(pid: int) {.thread.} =
- while true:
- sleep(1000)
- try:
- sendSignal(Pid(pid), 0)
- except:
- discard kill(Pid(getCurrentProcessId()), cint(SIGTERM))
- when defined(windows):
- proc monitorClientProcessIdThreadProc(pid: int) {.thread.} =
- var process = openProcess(SYNCHRONIZE, 0, DWORD(pid))
- if process != 0:
- discard waitForSingleObject(process, INFINITE)
- discard closeHandle(process)
- quit(0)
- var tid: Thread[int]
- proc hookProcMonitor*(pid: int) =
- when defined(posix) or defined(windows):
- createThread(tid, monitorClientProcessIdThreadProc, pid)
|