i looking @ http://tldp.org/ldp/abs/html/subshells.html, mention subshells can used parallelizing tasks. give example:
(cat list1 list2 list3 | sort | uniq > list123) & (cat list4 list5 list6 | sort | uniq > list456) & # merges , sorts both sets of lists simultaneously. # running in background ensures parallel execution. # # same effect # cat list1 list2 list3 | sort | uniq > list123 & # cat list4 list5 list6 | sort | uniq > list456 &
wait   # don't execute next command until subshells finish.  diff list123 list456 are first 2 commands not going finish in same time second 2 commands? had thought last 2 commands execute in parallel, , sleep loops, unable create situation differed.  how last 2 commands differ first two?  if don't differ, why subshells mentioned method of parallelization when same done putting processes in background?
in fact, both:
c1 | c2 &  # c1 , c2 arbitrary commands and:
(c1 | c2) & use subshells, does:
c1 | c2 without &.  reason that, in general, pipeline requires creating subshell.
(there specific cases shells, including bash, can avoid creating subshell: instance, prog | while read ... not create separate subshell while loop in bash, provided set lastpipe (shopt -s lastpipe) and job control not active.  create subshell in other shells.  can seen observing values of variables set or within while loop.  when c2 command not shell built-in, shell has make sub-shell internally in order hook pipe.)
Comments
Post a Comment