when programa killed external process (killed: 9), cannot redirect output (std/stderr) or save variable.
programa:
$ ./programa arg1 on stderr on stdout killed: 9
failing save variable:
$ programa_output=`programa arg1` $ echo "$programa_output" $
redirection file not work:
$ programa arg1 > output.txt $ cat ./output.txt $
any clues save / redirect output?
the immediate cause here program flushing buffers on line-by-line basis when output tty; hence, when redirected file or fifo, hasn't flushed yet when sigkill delivered -- , since sigkill can't trapped or delayed, has no opportunity perform flush @ time.
if you're on gnu platform, can use stdbuf
modify behavior default:
stdbuf -o0 ./programa arg1 >output.txt
...or...
output=$(stdbuf -o0 ./programa arg1)
since know flushes when output tty (since output shows when run without redirection), can use unbuffer
(a tool ships expect
) simulate effect:
output=$(unbuffer ./programa arg1)
however, surest thing modify source of programa
explicitly perform flush operation after every write want ensure complete -- , use sigkill when absolutely required. (a common practice use sigterm, wait substantial time period, , resort sigkill).
Comments
Post a Comment