def system(*args)
      delayer.Deferred.Thread.new {
        Process.waitpid2(Kernel.spawn(*args))
      }.next{|_pid, status|
        if status && status.success?
          status
        else
          raise ForeignCommandAborted.new("command aborted: #{args.join(' ')}", process: status) end
      }
    end
def system(*args)
      delayer.Deferred.Thread.new {
        Process.waitpid2(Kernel.spawn(*args))
      }.next{|_pid, status|
        if status && status.success?
          status
        else
          raise ForeignCommandAborted.new("command aborted: #{args.join(' ')}", process: status) end
      }
    end
Kernel#systemを呼び出して、コマンドが成功たら成功するDeferredを返す。
 失敗した場合、trap{}ブロックには $? の値(Process::Status)か、例外が発生した場合それが渡される
 ==== Args
 [*args] Kernel#spawn の引数
 ==== Return
 Deferred