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.read
i, o = IO.pipe spawn('cat a.txt', :out => o) o.close p i.read
system('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