# File lib_core/rucy/messenger.rb, line 410
    def child_process
      if (@privilege.privileged_user?) then
        begin
          @privilege.cancel_privilege
        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