def sfork(command, &block)
      pipe_me_in, pipe_peer_out = IO.pipe
      pipe_peer_in, pipe_me_out = IO.pipe
      pid = nil
      pid_mutex = Mutex.new
      pid_cv = ConditionVariable.new
      Thread.start do
        ProcessController.block_output_synchronize do
          STDOUT.flush
          ProcessController.each_active_object do |pc|
            for jobs in pc.active_jobs
              jobs.flush
            end
          end
          pid = fork {
            Thread.list.each do |th|
              th.kill unless Thread.current == th
            end
            STDIN.reopen(pipe_peer_in)
            STDOUT.reopen(pipe_peer_out)
            ObjectSpace.each_object(IO) do |io|
              if ![STDIN, STDOUT, STDERR].include?(io)
                io.close unless io.closed?
              end
            end
            yield
          }
        end
        pid_cv.signal
        pipe_peer_in.close
        pipe_peer_out.close
        command.notify "job(%name:##{pid}) start", @shell.debug?
        begin
          _pid = nil
          command.notify("job(%id) start to waiting finish.", @shell.debug?)
          _pid = Process.waitpid(pid, nil)
        rescue Errno::ECHILD
          command.notify "warn: job(%id) was done already waitpid."
          _pid = true
          
          
        ensure
          command.notify("Job(%id): Wait to finish when Process finished.", @shell.debug?)
          
          if USING_AT_EXIT_WHEN_PROCESS_EXIT or _pid
          else
            command.notify("notice: Process finishing...",
                           "wait for Job[%id] to finish.",
                           "You can use Shell#transact or Shell#check_point for more safe execution.")
            redo
          end
          @job_monitor.synchronize do
            terminate_job(command)
            @job_condition.signal
            command.notify "job(%id) finish.", @shell.debug?
          end
        end
      end
      pid_mutex.synchronize do
        while !pid
          pid_cv.wait(pid_mutex)
        end
      end
      return pid, pipe_me_in, pipe_me_out
    end