If a process redirects stdout, supervisord creates a pipe and watchs for READ event on the pipe. If the readfd() fails due to some error(in my case it's OutOfMemory exception), the pipe will be removed from the poll list but the FD is not closed.
This means the pipe has no reader and the process will block forever when writing something to stdout.
It seems supervisor could either ignore such errors and retry or just close the pipe to let the child get EPIPE on writing to stdout
If a process redirects stdout, supervisord creates a pipe and watchs for READ event on the pipe. If the
readfd()
fails due to some error(in my case it's OutOfMemory exception), the pipe will be removed from the poll list but the FD is not closed. This means the pipe has no reader and the process will block forever when writing something to stdout.It seems supervisor could either ignore such errors and retry or just close the pipe to let the child get EPIPE on writing to stdout