]> git.ipfire.org Git - thirdparty/coreutils.git/commit
env: new options --{default,ignore,block}-signal[=SIG]
authorAssaf Gordon <assafgordon@gmail.com>
Fri, 15 Feb 2019 19:31:48 +0000 (12:31 -0700)
committerPádraig Brady <P@draigBrady.com>
Mon, 4 Mar 2019 08:37:07 +0000 (00:37 -0800)
commit95adadd9a420812ddd3f0fc6105f668922a97ae5
tree7776675d03905503ace0005d62e6eff2a3d08803
parent186896d65f6182dff15cad6c1045d22ad2004962
env: new options --{default,ignore,block}-signal[=SIG]

New options to set signal handlers for the command being executed.
--block-signal suggested by Paul Eggert in http://bugs.gnu.org/34488#71
--default-signal is useful to overcome the POSIX limitation that shell
must not override inherited signal state, e.g. the second 'trap' here is
a no-op:

   trap '' PIPE && sh -c 'trap - PIPE ; seq inf | head -n1'

Instead use:

   trap '' PIPE && sh -c 'env --default-signal=PIPE seq inf | head -n1'

Similarly, the following will prevent CTRL-C from terminating the
program:

   env --ignore-signal=INT seq inf > /dev/null

See https://bugs.gnu.org/34488#8

* NEWS: Mention new options.
* doc/coreutils.texi (env invocation): Document new options.
* man/env.x: Add example of --default-signal=SIG usage.
(SEE ALSO): Mention sigprocmask.
* src/env.c (signals): New global variable.
(longopts): Add new options.
(usage): Print new options.
(parse_signal_params): Parse comma-separated list of signals, store in
signals variable.
(reset_signal_handlers): Set each signal to SIG_DFL/SIG_IGN.
(parse_block_signal_params): Parse command-line options.
(set_signal_proc_mask): Call sigprocmask to block/unblock signals.
(main): Process new options.
* src/local.mk (src_env_SOURCES): Add operand2sig.c.
* tests/misc/env-signal-handler.sh: New test.
* tests/local.mk (all_tests): Add new test.
NEWS
doc/coreutils.texi
man/env.x
src/env.c
src/local.mk
tests/local.mk
tests/misc/env-signal-handler.sh [new file with mode: 0755]