[systemd-devel] Reason for IgnoreSIGPIPE=true by default

Ansgar Burchardt ansgar at debian.org
Fri Jul 25 11:22:54 PDT 2014


Hi,

I'm wondering what the reason for IgnoreSIGPIPE to default to true is.
The documentation just states that

    Defaults to true because SIGPIPE generally is useful only in shell
    pipelines.

But I don't think that this alone is a good reason to change the default.

It can confuse programs which use pipes and do not expect their signal
handlers to be messed with, see [1] for the same issue in Python. As
another example, "tar xf *.tar.gz" will fail on some archives if SIGPIPE
is ignored[2].

Another problem is that this not only affects the program started by
systemd itself, but leaks into all child processes as well. See [3] for
a bug report against cron due to this (yes, can be worked around by
setting IgnoreSIGPIPE=false for cron.service, but I believe systemd is
wrong here).

Ansgar

  [1] <http://bugs.python.org/issue1652>
  [2] I think the .gz needs trailing zeros in either the compressed or
      uncompressed data stream. I could look at the file it failed
      with...
  [3] <https://bugs.debian.org/756047>


More information about the systemd-devel mailing list