class_docstr: Ray actor created by JobManager for each submitted job, responsible to
  setup runtime_env, execute given shell command in subprocess, update job
  status, persist job logs and manage subprocess group cleaning.
  
  One job supervisor actor maps to one subprocess, for one job_id.
  Job supervisor actor should fate share with subprocess it created.
docstr: Ensure each process is already finished or send a kill signal.
docstr_tok: ["Ensure","each","process","is","already","finished","or","send","a","kill","signal","."]
code: def _kill_processes(
      self, processes: List[psutil.Process], sig: signal.Signals
  ):
      """Ensure each process is already finished or send a kill signal."""
      for proc in processes:
          try:
              os.kill(proc.pid, sig)
          except ProcessLookupError:
              # Process is already dead
              pass
  
imports: import asyncio
  import copy
  import json
  import logging
  import os
  import psutil
  import random
  import signal
  import string
  import subprocess
  import sys
  import time
  import traceback
  from asyncio.tasks import FIRST_COMPLETED
  from collections import deque
  from typing import Any, Dict, Iterator, List, Optional, Tuple, Union
  from ray.util.scheduling_strategies import NodeAffinitySchedulingStrategy, SchedulingStrategyT
  import ray
  from ray._private.gcs_utils import GcsAioClient
  from ray._private.utils import run_background_task
  import ray._private.ray_constants
  from ray._private.runtime_env.constants import RAY_JOB_CONFIG_JSON_ENV_VAR
  from ray.actor import ActorHandle
  from ray.dashboard.consts import RAY_JOB_ALLOW_DRIVER_ON_WORKER_NODES_ENV_VAR, DEFAULT_JOB_START_TIMEOUT_SECONDS, RAY_JOB_START_TIMEOUT_SECONDS_ENV_VAR
  from ray.dashboard.modules.job.common import JOB_ID_METADATA_KEY, JOB_NAME_METADATA_KEY, JOB_ACTOR_NAME_TEMPLATE, JOB_LOGS_PATH_TEMPLATE, SUPERVISOR_ACTOR_RAY_NAMESPACE, JobInfo, JobInfoStorageClient
  from ray.dashboard.modules.job.utils import file_tail_iterator
  from ray.exceptions import ActorUnschedulableError, RuntimeEnvSetupError
  from ray.job_submission import JobStatus
  from ray._private.event.event_logger import get_event_logger
  from ray.core.generated.event_pb2 import Event
label_desc: Use image node_id 6 for calling the JobSupervisor obj's underlying member method code with example usage: obj._kill_processes(processes, sig) without return types