[FFmpeg-trac] #8917(undetermined:new): Exit on SIGPIPE or SIGHUP - "-xerror" not working as expected

FFmpeg trac at avcodec.org
Sun Oct 4 13:42:37 EEST 2020

#8917: Exit on SIGPIPE or SIGHUP - "-xerror" not working as expected
             Reporter:  atom         |                     Type:  defect
               Status:  new          |                 Priority:  normal
            Component:               |                  Version:  4.2
  undetermined                       |
             Keywords:  sigpipe      |               Blocked By:
  sighup error xerror                |
             Blocking:               |  Reproduced by developer:  0
Analyzed by developer:  0            |
 Expectation: ffmpeg process should die on errors and certain signals, when
 "-xerror" option is used.

 Behaviour: Even with  "-xerror", ffmpeg continues to run after receiving a
 SIGPIPE or SIGHUP signal.

 Use cases: Using a pipe to test for "non monotonically increasing dts". In
 these cases, "grep" immediately (or almost immediately) matches the string
 "non monotonically increasing dts" and exits, closing the pipe. This
 should cause ffmpeg to die, but it keeps running and processing the entire
 input file, even with the "-xerror" option.

 In the first example, this would send a SIGPIPE signal to ffmpeg, which
 should reasonably stop the ffmpeg process:

 `ffmpeg -xerror -i test.mkv -f null - 2>&1 | grep -m 1 'non monotonically
 increasing dts'`

 In the second example, the closed pipe stops "cat", and the coprocess
 receives a SIGHUP signal. Again, this should reasonably stop ffmpeg.

 `cat < <( ffmpeg   -xerror  -i test.mkv -f null - 2>&1 ) | grep -m 1 'non
 monotonically increasing dts'`

 If it's not reasonable that "-xerror" kills the ffmpeg process on these
 signals, then there should probably be one or more options to kill ffmpeg
 on various signals (eg an "-xsignal" option) or specific signals (eg an
 "-xpipe", and "-xhup" options).

 As it is now, ffmpeg can consume incredible resources after it should have
 died. In many cases, eg processing streams and/or continuing "hidden"
 after a SIGHUP signal, can run indefinitely, and somewhat hidden.

 nb, for duplicating this behaviour with good files, change the string that
 grep is matching to something such as "fps", or "mapping", or "Stream".
 This will match almost immediately with most/all video files, and
 duplicate the described behaviour.

 No doubt there are countless other use cases where it would be desirable
 for ffmpeg to exit when receiving a SIGPIPE, SIGHUP, or other signals.

Ticket URL: <https://trac.ffmpeg.org/ticket/8917>
FFmpeg <https://ffmpeg.org>
FFmpeg issue tracker

More information about the FFmpeg-trac mailing list