On Fri, May 21, 2021 at 1:37 PM Manlio Perillo <[email protected]> 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 <[email protected]> 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 [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/golang-nuts/CAOyqgcW95vdvnZ1XH7TDFdckkESZgKO5zQ5ZtXmXFh7oNpUV1g%40mail.gmail.com.

Reply via email to