27 std::atomic_bool quit =
false;
32 terminatePipe.create();
33 auto &quit_ = this->quit;
34 int terminateFd = terminatePipe.readSide.get();
35 thread = std::thread([fd, terminateFd, &quit_]() {
36 setCurrentThreadName(
"MonitorFdHup");
51 fds[0].events = POLLHUP;
52 fds[1].fd = terminateFd;
53 fds[1].events = POLLIN;
55 auto count = poll(fds, 2, -1);
57 if (errno == EINTR || errno == EAGAIN) {
61 throw SysError(
"in MonitorFdHup poll()");
71 if (count == 0)
continue;
72 if (fds[0].revents & POLLHUP) {
101 writeFull(terminatePipe.writeSide.get(),
"*",
false);
102 if (thread.joinable()) {