    while True:
      sm.update()
  
      started = sm['deviceState'].started
      driverview = params.get_bool("IsDriverViewEnabled")
      ensure_running(managed_processes.values(), started=started, driverview=driverview, notcar=sm['carParams'].notCar, not_run=ignore)
  
      running = ' '.join("%s%s\u001b[0m" % ("\u001b[32m" if p.proc.is_alive() else "\u001b[31m", p.name)
                         for p in managed_processes.values() if p.proc)
      print(running)
      cloudlog.debug(running)
 
</s> remove   ensure_running(managed_processes.values(), started=False, not_run=ignore)

 </s> add  </s> remove def ensure_running(procs: ValuesView[ManagerProcess], started: bool, driverview: bool=False, notcar: bool=False,
 </s> add def ensure_running(procs: ValuesView[ManagerProcess], started: bool, params=None, CP: car.CarParams=None, </s> remove     self.driverview = driverview
    self.notcar = notcar
 </s> add     self.callback = callback
    ensure_running(managed_processes.values(), started, params=params, CP=sm['carParams'], not_run=ignore)
    while True:
      sm.update()
  
      started = sm['deviceState'].started
    ensure_running(managed_processes.values(), started, params=params, CP=sm['carParams'], not_run=ignore)
    ensure_running(managed_processes.values(), started, params=params, CP=sm['carParams'], not_run=ignore)
  
      running = ' '.join("%s%s\u001b[0m" % ("\u001b[32m" if p.proc.is_alive() else "\u001b[31m", p.name)
                         for p in managed_processes.values() if p.proc)
      print(running)
      cloudlog.debug(running)
keep keep keep keep replace replace keep keep keep keep keep
 manager: start process by callback (#24417) 
selfdrive/manager/manager.py