March 20, 2016
Program is blocked on exit, because of a blocking file read.
I'd be glad to just kill it and exit.

In this case I'm using dinotify, I exposed the fd.
This issue is it's not working or blocked on exit.

Never mind the constant monitor.add

static immutable string stdoutFn="passFiles/vAppStdout";

void monitorStdout(){
  auto monitor = iNotify();
  Watch watch = monitor.add(stdoutFn.ptr, IN_ALL_EVENTS );

  timeval timeout={tv_sec:0, tv_usec:500000 };

  //int flags = fcntl(monitor.fd, F_GETFL, 0);
  //fcntl(monitor.fd, F_SETFL, flags | O_NONBLOCK);

  while(run){
    fd_set fdset;
    FD_ZERO(&fdset);
    FD_SET(monitor.fd, &fdset);
    if(select(monitor.fd+1, &fdset, cast(fd_set*)null, cast(fd_set*)null, &timeout) ){
      auto events = monitor.read();
      watch = monitor.add(stdoutFn.ptr, IN_ALL_EVENTS );
  }

  writeln("Exit monitor");
}

March 21, 2016
I don't know, but you could always just use fcntl if you already can assume you're on Linux.

extern (C) int fcntl(int, int, int);

C keeps the constants under lock and key of course, so you have to specify them manually. But you could write a C program to print them out, or generate D code I suppose.

const int F_SETFL = 4
const int F_GETFL = 3
const int O_NONBLOCK = 2048
fcntl(fd,F_SETFL,O_NONBLOCK | fcntl(fd,F_GETFL,42));

not tested or anything.