Spawn = Fork + Exec, but works also on platforms which don't support fork.
The usage of spawn is often said to be cryptic. Here I'll describe common cases.
system('ls')pid = spawn(['ls', 'ls']) Process.wait(pid)system('ls .')pid = spawn('ls', '.') Process.wait(pid)system('ls . &')pid = spawn('ls', '.')system('ls . > a.txt')pid = spawn('ls', '.', :out => 'a.txt') Process.wait(pid)system('ls . >> a.txt')pid = spawn('ls', '.', :out => ['a.txt', 'a']) Process.wait(pid)system('ls . >& a.txt')pid = spawn('ls', '.', [:out, :err] => ['a.txt', 'w']) Process.wait(pid)IO.popen('cat a.txt') {|io| p io.readi, o = IO.pipe spawn('cat a.txt', :out => o) o.close p i.readsystem('make all &')spawn('make', 'all)Dir.chdir('a') { system 'make all &' }spawn('make', 'all', :chdir => 'a')Passing ENV:
- Shell:
$ AAA=1 make all & - Ruby:
ENV['AAA'] = '1'; system('make all &') - Ruby with Spawn:
spawn({'AAA' => '1'}, 'make', 'all')
- Shell:
Further information can be available in process.c in ruby trunk. Here the documentation from the file:

No comments:
Post a Comment