Sha256: bf47d62127d2c28e823137c51deaf2bdd511f560b016c9d430166a5e9689c4b5

Contents?: true

Size: 1.87 KB

Versions: 9

Compression:

Stored size: 1.87 KB

Contents

require 'drb'
require 'skynet/skynet_guid_generator'
require 'skynet/skynet_logger'
require 'skynet/skynet_config'
require 'timeout'    

Skynet::CONFIG[:SKYNET_PATH] ||= File.expand_path(File.dirname(__FILE__) +"/..")

require 'skynet/skynet_debugger'
require 'skynet/skynet_message'
require 'skynet/message_queue_adapters/message_queue_adapter'
require 'skynet/message_queue_adapters/tuple_space'
require "skynet/skynet_message_queue"
require 'skynet/skynet_partitioners'
require 'skynet/skynet_job'
require 'skynet/skynet_worker'
require 'skynet/skynet_task'
require 'skynet/skynet_manager'
require 'skynet/skynet_tuplespace_server'
require 'skynet/skynet_ruby_extensions'
require 'skynet/mapreduce_test'
require 'skynet/skynet_launcher'
require 'skynet/skynet_console'
require 'skynet/mapreduce_helper'

begin
  require 'fastthread'
rescue LoadError
  # puts 'fastthread not installed, using thread instead'
  require 'thread'
end

class << Skynet

  # kinda like system() but gives me back a pid
  def fork_and_exec(command)
    sleep 0.01  # remove contention on manager drb object
    log = Skynet::Logger.get
    debug "executing /bin/sh -c \"#{command}\""
    pid = safefork do
      close_files
      exec("/bin/sh -c \"#{command}\"")
      exit
    end
    Process.detach(pid)
    pid
  end

  def safefork (&block)
    @fork_tries ||= 0
    fork(&block)
  rescue Errno::EWOULDBLOCK
    raise if @fork_tries >= 20
    @fork_tries += 1
    sleep 5
    retry
  end

  # close open file descriptors starting with STDERR+1
  def close_files(from=3, to=50)
    close_console
    (from .. to).each do |fd|
      IO.for_fd(fd).close rescue nil
     end
  end

  def close_console
    STDIN.reopen "/dev/null"
    STDOUT.reopen "/dev/null", "a"
    STDERR.reopen STDOUT 
  end

  def process_alive?(worker_pid)
    Process.kill(0,worker_pid)
    return true
  rescue Errno::ESRCH => e
    return false
  end  

end

Version data entries

9 entries across 9 versions & 1 rubygems

Version Path
brendan-skynet-0.9.3.2 lib/skynet.rb
brendan-skynet-0.9.3.3 lib/skynet.rb
brendan-skynet-0.9.3.5 lib/skynet.rb
brendan-skynet-0.9.3.6 lib/skynet.rb
brendan-skynet-0.9.3.7 lib/skynet.rb
brendan-skynet-0.9.3.8 lib/skynet.rb
brendan-skynet-0.9.31 lib/skynet.rb
brendan-skynet-0.9.32 lib/skynet.rb
brendan-skynet-0.9.33 lib/skynet.rb