If I understand rightly, it boils down to this: https://play.golang.org/p/vYlTzluIuBL
The documentation <https://golang.org/pkg/os/signal/#Reset> does say "Reset undoes the effect of any prior calls to Notify for the provided signals", without mentioning any effect on Ignore'd signals. On Friday, 21 May 2021 at 21:44:01 UTC+1 Ian Lance Taylor wrote: > On Fri, May 21, 2021 at 1:37 PM Manlio Perillo <manlio....@gmail.com> > wrote: > > > > On Friday, May 21, 2021 at 10:22:08 PM UTC+2 Ian Lance Taylor wrote: > >> > >> On Fri, May 21, 2021 at 7:49 AM Manlio Perillo <manlio....@gmail.com> > wrote: > >> > > >> > In a program I want to read a password from the terminal, using > golang.org/x/term. > >> > The problem is that there is a possibility that a signal is sent to > the program, resulting in the terminal state not being restored: > >> > https://play.golang.org/p/4IjLve9gDx0 > >> > > >> > In case of term.ReadPassword, on Linux I noted that ECHO is restored, > but let's ignore it. > >> > > >> > What I tried to do was to ttemporarily block the signals, using > signal.Ignore and signal.Reset; the problem is that Reset doesn't reset > ignored signals. > >> > > >> > Looking at the runtime code, Go only use SIG_DFL in special cases. > >> > Is there a reason why Reset don't reset ignore signals? Portability? > >> > > >> > Is there a simple, portable way, to do what I want? > >> > >> I thought that signal.Reset would reset a signal ignored by > >> signal.Ignore. What happens when you try it? > >> > > > > In https://play.golang.org/p/c88iu09mOgO, the SIGINT signal (via > Ctrl-C) is ignored after the call to `signal.Ignore`. > > However SIGINT is still ignored after the call to `signal.Reset`. > > That is odd. Would you mind opening an issue with a test case? Thanks. > > > >> In any case I don't see why your program wants to ignore signals. It > >> seems better to catch the signal, restore the terminal, and exit. > >> > > > > In some C/C++ programs I have often see the use sigprocmask: > > https://www.gnu.org/software/libc/manual/html_node/Why-Block.html > > Using sigprocmask is not the same as using signal.Ignore. sigprocmask > will temporarily block the signal until the old signal mask is > restored, at which point the signal will be delivered. signal.Ignore > will cause the signal to be ignored completely. That is, > signal.Ignore is like using sigaction to change the handler to > SIG_IGN. It is not like sigprocmask. > > Ian > -- You received this message because you are subscribed to the Google Groups "golang-nuts" group. To unsubscribe from this group and stop receiving emails from it, send an email to golang-nuts+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/golang-nuts/4033638c-347e-4c13-9a3f-bab3fbeb006an%40googlegroups.com.