On Saturday, 23 November 2019 at 10:09:51 UTC, mipri wrote:
On Saturday, 23 November 2019 at 09:54:48 UTC, aliak wrote:
Is there a way to go about killing a process after spawning it on a SIGINT?

I can't do this for e.g. because kill is not @nogc.

Well, this works:

import std;
import core.stdc.signal;

extern(C) int kill(int pid, int sig) nothrow @nogc @system;

int currentSpawnedPid;
extern(C) void killCurrentPidHandler(int sig) nothrow @nogc @system {
  if (currentSpawnedPid > 1)
    kill(currentSpawnedPid, sig);
}

int main() {
auto pid = spawnProcess(["sleep", "50s"], stdin, stdout, stderr);
  currentSpawnedPid = pid.processID;
  signal(SIGINT, &killCurrentPidHandler);
  return wait(pid);
}

Thanks, looks like I'll have to go that route.

Reply via email to