def get_status(self):
        if hasattr(self, '_status') and self._status is not None:
            return self._status

        if(self._terminated):
            return self._status

        # if pid still exists then return 'Running'
        # else if check process exit code in exec dir
        if _psutil.pid_exists(self._pid):
            proc = _psutil.Process(pid=self._pid)
            if _isfunction(proc.status) or _ismethod(proc.status):
                status = str(proc.status()).capitalize()
            else:
                status = str(proc.status).capitalize()
            if status in ['Zombie']:
                return self._get_status()
            elif status in ['Sleeping', 'Disk-sleep']:
                return 'Running'
            else:
                return status
        else:
            return self._get_status()
 def cancel(self):
     if _psutil.pid_exists(self._pid):
         _psutil.Process(pid=self._pid).kill()
         self._terminated = True
         self._status = 'Canceled'
         self.__finalize_save()