diff options
author | Assaf Gordon <assafgordon@gmail.com> | 2019-02-15 12:31:48 -0700 |
---|---|---|
committer | Pádraig Brady <P@draigBrady.com> | 2019-03-04 00:37:07 -0800 |
commit | 95adadd9a420812ddd3f0fc6105f668922a97ae5 (patch) | |
tree | 7776675d03905503ace0005d62e6eff2a3d08803 /man | |
parent | 186896d65f6182dff15cad6c1045d22ad2004962 (diff) | |
download | coreutils-95adadd9a420812ddd3f0fc6105f668922a97ae5.tar.gz |
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.
Diffstat (limited to 'man')
-rw-r--r-- | man/env.x | 28 |
1 files changed, 28 insertions, 0 deletions
@@ -37,3 +37,31 @@ parameter the script will likely fail with: .RE .PP See the full documentation for more details. +.PP +.SS "\-\-default-signal[=SIG]" usage +This option allows setting a signal handler to its default +action, which is not possible using the traditional shell +trap command. The following example ensures that seq +will be terminated by SIGPIPE no matter how this signal +is being handled in the process invoking the command. + +.PP +.RS +.nf +sh \-c 'env \-\-default-signal=PIPE seq inf | head \-n1' +.fi +.RE +.PP + +[NOTES] +POSIX's exec(2) pages says: +.RS +"many existing applications wrongly assume that they start with certain +signals set to the default action and/or unblocked.... Therefore, it is best +not to block or ignore signals across execs without explicit reason to do so, +and especially not to block signals across execs of arbitrary (not closely +cooperating) programs." +.RE + +[SEE ALSO] +sigaction(2), sigprocmask(2), signal(7) |