On Mon, 1 Jul 2024 20:40:38 +0900 Takashi Yano wrote: > On Mon, 6 May 2024 23:01:49 +0300 > ilya Basin wrote: > > I need your help with troubleshooting an issue with "pv": > > https://codeberg.org/a-j-wood/pv/issues/87 > > > > This app uses SIGALRM to interrupt a blocking write to STDOUT and read more > > data into the buffer. > > On Linuxes write() returns 0 after the signal, but on Cygwin even though > > the signal handler is called, the write call does not return, at least when > > writing to a pipe. > > What Linux environment you assume? I run the STC below on Debuan GNU/Linux, > > #include <stdio.h> > #include <unistd.h> > #include <signal.h> > #include <errno.h> > #include <signal.h> > #include <string.h> > > void handler(int sig) > { > printf("sig=%d\n", sig); > } > > int main() > { > int fd[2]; > > signal(SIGALRM, handler); > pipe(fd); > for (;;) { > int l = write(fd[1], "A", 1); > if (l == 1) { > printf("."); fflush(stdout); /* Normal */ > } else { > printf("%d: %s\n", l, strerror(errno)); /* Interrupt */ > } > } > } > > but, > kill -ALRM <pid of STC> > does not make output /* Interrupt */ line, but only /* Normal */ line.
and sig=14 as well. > uname -a: > Linux debian2 6.1.0-21-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.90-1 > (2024-05-03) x86_64 GNU/Linux > > The behaviour is same with cygwin. -- Takashi Yano <takashi.y...@nifty.ne.jp> -- Problem reports: https://cygwin.com/problems.html FAQ: https://cygwin.com/faq/ Documentation: https://cygwin.com/docs.html Unsubscribe info: https://cygwin.com/ml/#unsubscribe-simple