class_docstr: Exception raised when querying a zombie process. This is
  raised on macOS, BSD and Solaris only, and not always: depending
  on the query the OS may be able to succeed anyway.
  On Linux all zombie processes are querable (hence this is never
  raised). Windows doesn't have zombie processes.
class_docstr_tok: ["Exception","raised","when","querying","a","zombie","process",".","This","is","raised","on","macOS",",","BSD","and","Solaris","only",",","and","not","always",":","depending","on","the","query","the","OS","may","be","able","to","succeed","anyway",".","On","Linux","all","zombie","processes","are","querable","(","hence","this","is","never","raised",")",".","Windows","does","n't","have","zombie","processes","."]
code: def __init__(self, pid, name=None, ppid=None, msg=None):
      NoSuchProcess.__init__(self, msg)
      self.pid = pid
      self.ppid = ppid
      self.name = name
      self.msg = msg
      if msg is None:
          args = ["pid=%s" % pid]
          if name:
              args.append("name=%s" % repr(self.name))
          if ppid:
              args.append("ppid=%s" % self.ppid)
          details = "(%s)" % ", ".join(args)
          self.msg = "process still exists but it's a zombie " + details
  
imports: from __future__ import division, print_function
  import contextlib
  import errno
  import functools
  import os
  import socket
  import stat
  import sys
  import threading
  import warnings
  from collections import defaultdict
  from collections import namedtuple
  from socket import AF_INET
  from socket import SOCK_DGRAM
  from socket import SOCK_STREAM
label_desc: Use image node_id 1 to create a new ZombieProcess object from inherited base classes: NoSuchProcess with example: obj = ZombieProcess(pid, name, ppid, msg)