Я бы хотел быстро убить службу Windows, а не останавливать ее.Служба представляет собой процесс python, поэтому имя процесса - python.exe, и поэтому я не могу уничтожить процесс по имени.В данный момент я использую sc queryex servicename
, затем анализирую PID и убиваю PID.Это проблематично для моей подпроцессорной обработки (в настоящее время я закрываю сразу несколько служб, используя Popen
и contextlib.exitstack
), поскольку для этого потребуется выполнить две команды, и, следовательно, только одна из этих команд может быть распараллелена.
Возможно ли сделать это за один раз?Вот мой код:
# This portion is not parallel
pid_data = subprocess.check_output(["sc", "queryex", "svcname"])
if pid_data[0] != "PID":
raise ValueError("Incorrect line number while running svc search.")
else:
msgsvc_pid = int(pid_data[1])
with contextlib.ExitStack() as stack:
# This portion is parallel
stack.enter_context(self._kill_service_by_pid(msgsvc_pid, quiet))
for svc in svc_list:
stack.enter_context(self._kill_service(svc, quiet))
Где _kill_service_by_pid
и _kill_service
- оба метода, которые вызывают taskkill
для уничтожения службы, либо по имени процесса, либо по PID.