# File lib_core/rucy/messenger.rb, line 412
    def child_process
      if (Process.euid == 0 && (@subprocess_user || @subprocess_group)) then
        begin
          require 'etc'
          if (@subprocess_group) then
            case (@subprocess_group)
            when Numeric
              gid = @subprocess_group
            else
              gid = Etc.getgrnam(@subprocess_group).gid
            end
            Process.gid = gid
            Process.egid = gid
          end
          if (@subprocess_user) then
            case (@subprocess_user)
            when Numeric
              uid = @subprocess_user
            else
              uid = Etc.getpwnam(@subprocess_user).uid
            end
            Process.uid = uid
            Process.euid = uid
          end
        rescue
          @logger.err("error: failed to change subprocess privilege: #{$!.message} (#{$!.class}): #{$!.backtrace[0]}")
        end
      end

      socket_queue = SocketQueue.new(@messenger_queue_length)
      messenger_thgrp = start_messengers(@messenger_threads, socket_queue, @document, @logger, @access_log, MultiThreadMessenger)
      while (cmd = @child_socket.read(CMD_LEN))
        case (cmd)
        when SEND_IO
          socket = @child_socket.recv_io(TCPSocket)
          socket_queue.push(socket)
          @child_socket.write(RECV_IO)
        when CLOSE
          until (socket_queue.empty?)
            sleep(0.1)
          end
          stop_messengers(@messenger_threads, socket_queue, messenger_thgrp)
          @child_socket.write(CLOSE)
          @child_socket.close
          break
        else
          raise 'internal error.'
        end
      end

      nil
    end