Sha256: 0159cfa615819a217494194a76caefad4b848dcefa2c3fbeaf6a1660e6e7543d

Contents?: true

Size: 912 Bytes

Versions: 3

Compression:

Stored size: 912 Bytes

Contents

# frozen_string_literal: true

require_relative "./string_support"

module Fusuma
  # Rename process
  module CustomProcess
    attr_writer :proctitle

    def child_pids
      @child_pids ||= []
    end

    def fork
      pid = Process.fork do
        Process.setproctitle(proctitle)
        set_trap # for child process
        yield
      end
      child_pids << pid
      pid
    end

    def shutdown
      child_pids.each do |pid|
        Process.kill("TERM", pid)
      rescue Errno::ESRCH
        # ignore
      end

      child_pids.each do |pid|
        Process.wait(pid)
      rescue Errno::ECHILD
        # ignore
      end
    end

    def proctitle
      @proctitle ||= self.class.name.underscore
    end

    def set_trap
      Signal.trap("INT") {
        shutdown
        exit
      } # Trap ^C
      Signal.trap("TERM") {
        shutdown
        exit
      } # Trap `Kill `
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
fusuma-3.3.0 lib/fusuma/custom_process.rb
fusuma-3.2.0 lib/fusuma/custom_process.rb
fusuma-3.1.0 lib/fusuma/custom_process.rb