ruby - Kernel# gets stuck and Kernel#system does not when issuing gzip without any options -
long story short, i've been working on project , noticed when use:
1.9.3p392 :001 > `gzip` irb::abort: abort interrupt! (irb):1:in `call' (irb):1:in ``' (irb):1 /usr/local/rvm/rubies/ruby-1.9.3-p392/bin/irb:16:in `<main>' it wait indefinitely until ctrl + c.
although, when use:
1.9.3p392 :047 > system('gzip') gzip: compressed data not written terminal. use -f force compression. help, type: gzip -h => false it continue without me using ctrl + c
why using backticks stop process continuing?
the backticks operator implicitly redirects standard output of resulting subshell (which capture subshell's output) while system doesn't. can observe same hang using system follows:
system('gzip > /tmp/foo') this explicitly captures standard output , hang in same way.
when gzip has output redirected wait input until eof or other signal received. without output redirection issue error message mention. can same effect regular bash shell:
$ gzip gzip: compressed data not written terminal. use -f force compression. help, type: gzip -h and:
$ gzip > /tmp/foo ... where ... indicates gzip hang until receives appropriate signal.
Comments
Post a Comment