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.

Reply via email to