class_docstr: Object for monitoring
  
  Must be child of engine
  
  Handles signal messages and watches Engine process for exiting
class_docstr_tok: ["Object","for","monitoring","Must","be","child","of","engine","Handles","signal","messages","and","watches","Engine","process","for","exiting"]
docstr: Handle a signal request: send signal to parent process
docstr_tok: ["Handle","a","signal","request",":","send","signal","to","parent","process"]
code: def signal_request(self, content):
      """Handle a signal request: send signal to parent process"""
      sig = content["sig"]
      if isinstance(sig, str):
          sig = getattr(signal, sig)
      self.log.info(f"Sending signal {sig} to pid {self.pid}")
      # exception will be caught and wrapped by the caller
      self.parent_process.send_signal(sig)
      return {"status": "ok"}
  
imports: import asyncio
  import logging
  import os
  import pickle
  import signal
  import sys
  from subprocess import PIPE, Popen
  from threading import Thread
  import psutil
  import zmq
  from jupyter_client.session import Session
  from tornado.ioloop import IOLoop
  from traitlets.config import Config
  from zmq.eventloop.zmqstream import ZMQStream
  from ipyparallel import error, util
  from ipyparallel.util import local_logger
label_desc: Use image node_id 8 for calling the KernelNanny obj's underlying member method code with example usage: obj.signal_request(content) and returns: dict