Как закрыть процесс через python
Перейти к содержимому

Как закрыть процесс через python

  • автор:

Как завершить процесс python multiprocess

у меня есть процесс хочу по его названию( не по PID ) завершить его, как это реализовать?

Отслеживать

задан 2 июн 2021 в 13:17

Артём Новокеков Артём Новокеков

27 3 3 бронзовых знака

Покажите пожалуйста в вопросе, где у вас есть процесс?

2 июн 2021 в 13:50

1 ответ 1

Сортировка: Сброс на вариант по умолчанию

непонятно что имеется виду, если это рукотворный multiprocess процесс, то соответственно есть и его объект, у которого есть имя и метод terminate, берете объект процесса, сравниваете его имя, и при необходимости завершаете через terminate

import multiprocessing, time, random def test(s, m=500): while m > 0: print(f' = ') m -= 1 time.sleep(.5) if __name__ == '__main__': multiprocessing.freeze_support() count = 3 prcss = [multiprocessing.Process(name=f'test_', target=test, args=[f'run_test_']) for r in range(count)] pnames = [p.name for p in prcss] # имена процессов for p in prcss: p.start() while prcss: for p in prcss: name = random.choice(pnames) if p.name == name: # завершить по его названию p.terminate() prcss.remove(p) print(f'KILL 

') break time.sleep(1)

если это сторонний процесс, то через psutil

import psutil for proc in psutil.process_iter(): if proc.name() == 'test process': # завершить по его названию proc.kill() break 

Python, как правильно завершить процесс .exe?

Теперь через определённое время их нужно завершить, например третий профиль, потом пятый, первый и т.д
С этим я так и не разобрался.
Разобрался как убить все процессы firefox.exe:

os.system(«taskkill /im firefox.exe»)

Но при следующем запуске, firefox пишет что не корректно была завершена работа и просит запуститься в безопасном режиме.
При alt+f4 не ругается на некорректное завершение работы.
Вопрос в том как правильно завершить что бы он не ругался?
А ещё лучше как правильно завершить определённый профиль?

  • Вопрос задан более двух лет назад
  • 3790 просмотров

Комментировать
Решения вопроса 1

HemulGM

Hemul GM @HemulGM Куратор тега Python
Delphi Developer, сис. админ
Отправить сообщение приложению о закрытии через WinAPI
Ответ написан более двух лет назад
Нравится 1 2 комментария
XXocTT Python @XXocTT Автор вопроса
Не совсем пойму как. Гугл особо инфы не даёт, возможно я задаю вопрос не правильно

HemulGM

Hemul GM @HemulGM Куратор тега Python

Пётр Питаев, PostMessage(H, WM_QUIT, 0, 0);
H — Handle приложения (или окна)
PostMessage — это метод WInApi, гугли.

Ответы на вопрос 1

yupiter7575

Yupiter7575 @yupiter7575
Python программист

os.system(«taskkill /im firefox.exe»)

Это плохая практика. Намного лучше делать так:

import subprocess as sp sp.Popen('taskkill /im firefox.exe /f')

Если вы запускаете через интерпретатор пайтона, если же у вас упакованный .py файл, то лучше сделать так:

import psutil #pip isntall psutil for proc in psutil.process_iter(): if proc.name() == 'firefox.exe': proc.terminate()

Ответ написан более двух лет назад
XXocTT Python @XXocTT Автор вопроса
Спасибо. Но сожалению я получаю то же самое сообщение

выдает такую ошибку при установку psutil

Как завершить процесс python?

Сейчас надо внести изменения в один из файлов но не могу завершить работу бота телеграм. После ввода команды в консоль он продолжает работать ((
какие есть еще команды для убийства процесса?

  • Вопрос задан более двух лет назад
  • 1561 просмотр

Комментировать
Решения вопроса 0
Ответы на вопрос 1

vabka

Токсичный шарпист
Находишь нужный процесс через ps и убиваешь через обычный kill -9
Ответ написан более двух лет назад
EVG82 @EVG82 Автор вопроса

этой командой он вывел процессы не относящиеся к моей конкретной директории.
а через Putty дал так

Last login: Mon Feb 28 05:59:38 2022 from 178.166.210.107
root@templ-ubuntu-2004:~# cd /root/bots/botdelete_test
root@templ-ubuntu-2004:~/bots/botdelete_test# ps
PID TTY TIME CMD
1408 pts/0 00:00:00 bash
1417 pts/0 00:00:00 ps
root@templ-ubuntu-2004:~/bots/botdelete_test#

или я что то не так делаю?

мне нужно остановить бота не выключая сервер. так как если остановлю сервер, то заменить файл не смогу (

EVG82, ps aux | grep python
Затем, берем нужный pid и делаем kill -9
EVG82 @EVG82 Автор вопроса

А почему у процесса постоянно pid меняется?
Может на это влиять автозапуск процесса при сбоях на сервере?

621e4e1a30505819293953.jpeg

в данном случае грохнуть надо

root 2845 1 7 19:45 ? 00:00:00 /usr/bin/python3 /root/bots/botdelete_test/main.py

и каждый раз новый номер ) а у других нормально?

Vindicar

EVG82, ну вот тебе и ответ. Ты его таки грохаешь. но процесс почему-то перезапускается. Ты его случаем в system.d не запихивал, или еще в какую мониторилку?

EVG82 @EVG82 Автор вопроса

Vindicar, ну да.
но я в самом боте переименовываю файл bot.service и тоже самое.
то есть надо убрать из system.d ?

Vindicar

EVG82, эмм, ты после того как меняешь .service файл, перезагружаешь параметры systemd? У него вроде есть суб-команда daemon-reload.

Как завершить работу скрипта в Python

Баннер Баннер

Часто в процессе написания программ на Python возникает ситуация, когда необходимо ранее завершить работу скрипта. Такое может потребоваться, например, при обнаружении критической ошибки, которая не позволяет продолжить выполнение программы.

Рассмотрим пример. Допустим, в коде программы предусмотрена проверка наличия файла данных на диске. Если файл отсутствует, то продолжать выполнение программы не имеет смысла и требуется ее завершить.

import os if not os.path.exists('data.txt'): # здесь нужно завершить работу скрипта

В Python для раннего завершения работы скрипта можно использовать функцию exit() из модуля sys . Эта функция принимает один необязательный аргумент — статус завершения, который по умолчанию равен нулю. Если вызвать функцию без аргумента или с аргументом 0 , то это будет воспринято как успешное завершение работы скрипта. Любое другое значение аргумента будет воспринято как код ошибки.

Вот как можно доработать пример выше с использованием exit() :

import os import sys if not os.path.exists('data.txt'): print('Файл данных не найден') sys.exit(1)

Теперь, если при выполнении этого скрипта файл data.txt не будет найден, то скрипт завершит свою работу, и код возврата будет равен 1 . Этот код можно будет использовать для обработки ошибки в других скриптах или системных утилитах.

Важно помнить, что sys.exit() вызывает исключение SystemExit , которое можно перехватить. Если никто не перехватывает это исключение, то Python завершает работу. Если же исключение перехвачено, то функция exit() не вызывает завершение работы интерпретатора.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *