I am trying to create a python script which I will later run as a service. Now I want to run a particular part of the code only when iTunes is running. I understand from some research that polling the entire command list and then searching for the application for that list is expensive. I found out that processes on UNIX-based operating systems create a lock file to notify that a program is currently running, at which point we can use os.stat(location_of_file) to check if the file exists to determine if a program is running or not. Is there a similar lock file created on Windows?
If not what are the various ways in Python by which we can determine if a process is running or not? I am using python 2.7 and iTunes COM interface.
119k 25 25 gold badges 165 165 silver badges 297 297 bronze badges
asked Oct 16, 2011 at 20:33
1,969 3 3 gold badges 17 17 silver badges 24 24 bronze badges
What does the COM interface do if iTunes isn’t running?
Oct 16, 2011 at 20:37
If make an object using the COM interface in python, the COM interface automatically opens up iTunes.
Как посмотреть запущенные приложения открыть диспетчер задач в Windows
Oct 16, 2011 at 20:39
For what it’s worth, it’s up to an individual program whether or not it wants to create a lock file or PID file. Not all Linux/UNIX programs do.
Oct 16, 2011 at 21:24
21 Answers 21
You can not rely on lock files in Linux or Windows. I would just bite the bullet and iterate through all the running programs. I really do not believe it will be as «expensive» as you think. psutil is an excellent cross-platform python module cable of enumerating all the running programs on a system.
import psutil «someProgram» in (p.name() for p in psutil.process_iter())
2,123 1 1 gold badge 14 14 silver badges 17 17 bronze badges
answered Oct 17, 2011 at 1:54
106k 20 20 gold badges 172 172 silver badges 230 230 bronze badges
Upon trying out this program, access is denied for some processes even when I run it as an administrator. I will probably just use try and except to ignore these instances, but it is something to watch out for
Dec 20, 2013 at 1:48
Appears to be BSD now
Aug 19, 2014 at 16:41
Warning: this causes a psutil.NoSuchProcess exception if a process that psutil.get_pid_list() returned has already exited when psutil.Process(i).name is executed. Be sure to catch this.
Jun 12, 2015 at 12:58
Beware of the case. The result is case sensitive.
– user3103059
Nov 13, 2018 at 18:37
For additional speed-up, specify psutil.process_iter(attrs=[‘name’]) to only obtain the name attribute, which will be faster (marginally). psutil.readthedocs.io/en/latest/#psutil.process_iter
Oct 15, 2021 at 18:51
import subprocess def process_exists(process_name): call = ‘TASKLIST’, ‘/FI’, ‘imagename eq %s’ % process_name # use buildin check_output right away output = subprocess.check_output(call).decode() # check in last line for process name last_line = output.strip().split(‘rn’)[-1] # because Fail message could be translated return last_line.lower().startswith(process_name.lower())
and now you can do:
Как посмотреть Запущенные программы и приложения На компьютере
>>> process_exists(‘eclipse.exe’) True >>> process_exists(‘AJKGVSJGSCSeclipse.exe’) False
To avoid calling this multiple times and have an overview of all the processes this way you could do something like:
# get info dict about all running processes import subprocess output = subprocess.check_output((‘TASKLIST’, ‘/FO’, ‘CSV’)).decode() # get rid of extra » and split into lines output = output.replace(‘»‘, »).split(‘rn’) keys = output[0].split(‘,’) proc_list = [i.split(‘,’) for i in output[1:] if i] # make dict with proc names as keys and dicts with the extra nfo as values proc_dict = dict((i[0], dict(zip(keys[1:], i[1:]))) for i in proc_list) for name, values in sorted(proc_dict.items(), key=lambda x: x[0].lower()): print(‘%s: %s’ % (name, values))
Источник: stackoverflow.com
Проверить запущена ли программа
19 май 2019, 21:17
Часто при написании скриптов на bash возникает типичная задача — узнать, запущен ли процесс с определенным именем, и что-то сделать в случае его отсутствия/наличия. Почти всегда начинающие скриптописатели пытаются использовать для этого уже известную им команду ps прогоняя ее вывод через grep <имя_программы>в различных комбинациях. Не спорю — так тоже можно добиться желаемого. Но конструкция будет усложнена тем, что надо из вывода исключить еще реакцию на сам фрагмент grep <имя_программы>который окажется выводе ps, т.е. надо экранировать и т.д..
Тогда как имеется гораздо более простое для запоминания решение, через pidof. Команда выводит список pid запущенных процессов с заданным именем. (Что позволяет при желании даже узнать количество экземпляров запущенного процесса.) Но в простых случаях:
if [ «$(pidof )» ] then fi
Можно еще проще:
if [ «`pidof `» ] then fi
Но здесь уже имя процесса должно быть одним словом без спецсимволов.
Или можно и еще проще:
pidof
Годится для выполнения одной команды. То что после «» запустится только в случае отсутствия запущенного процесса с заданным именем.
Источник: linuxmint.com.ru
Автоматизируйся с xStarter
Как проверить запущена ли программа и, если нет, запустить ее?
Помогите пожалуйста не могу сделать это.
Re: Как проверить запущена ли программа?
Сообщение LizardOfOzz » Сб май 31, 2008 10:13 pm
roskva писал(а): Как проверить запущена ли программа и, если нет, запустить ее?
Помогите пожалуйста не могу сделать это.
Нужное действие называется «количество запущенных».
Re: Как проверить запущена ли программа?
Сообщение roskva » Вс июн 01, 2008 11:25 am
Спасибо, разобрался!
Re: Как проверить запущена ли программа?
Сообщение Gennadiy » Ср фев 18, 2009 3:00 pm
А можно поподробней?
Re: Как проверить запущена ли программа?
Сообщение LizardOfOzz » Ср фев 18, 2009 3:21 pm
Gennadiy писал(а): А можно поподробней?
Если программа запущена, то количество соответствующих процессов больше нуля.
Re: Как проверить запущена ли программа?
Сообщение Gennadiy » Чт фев 19, 2009 1:49 pm
Для особо одарённых можно по пунктам.
Там есть — Наименование программы, полный путь и PID.
Хотелось бы при закрытии окна программы автоматом запустить её снова.
Re: Как проверить запущена ли программа?
Сообщение avmaksimov » Чт фев 19, 2009 2:39 pm
Gennadiy писал(а): Для особо одарённых можно по пунктам.
Там есть — Наименование программы, полный путь и PID.
Хотелось бы при закрытии окна программы автоматом запустить её снова.
Тогда все по другому. От грамотного задания многое зависит.
Создаете задачу, которая запускается по событию «Процесс стартует/останавливается», указываете имя процесса или даже путь, если имя процесса может совпадать. Ставите условие на «остановку». В действиях создаете одно только действие — запуск программы.
За это сообщение автора avmaksimov поблагодарил: Gennadiy (Чт фев 19, 2009 2:39 pm)
Рейтинг: 33.33%
С уважением, Андрей.
Re: Как проверить запущена ли программа?
Сообщение Gennadiy » Чт фев 19, 2009 3:20 pm
avmaksimov — ты класный парень.
Может подскажешь, как запустить программу (не важно какую), когда закрывается окно с определённым именем (например «Петров»).
Re: Как проверить запущена ли программа?
Сообщение yarunya » Чт фев 19, 2009 3:26 pm
Но перед этим нужно установить модуль xStartHooks.
http://www.xstarter.com/download/xstarthooks.zip
Re: Как проверить запущена ли программа?
Сообщение Gennadiy » Чт фев 19, 2009 3:35 pm
Создаете задачу, которая запускается по событию «Процесс стартует/останавливается», указываете имя процесса или даже путь, если имя процесса может совпадать. Ставите условие на «остановку». В действиях создаете одно только действие — запуск программы. [/quote]
А как проверять, если один экзеипляр запущен, то второй не запускать?
Последний раз редактировалось Gennadiy Чт фев 19, 2009 3:46 pm, всего редактировалось 1 раз.
Re: Как проверить запущена ли программа?
Сообщение Gennadiy » Чт фев 19, 2009 3:41 pm
Но перед этим нужно установить модуль xStartHooks.
http://www.xstarter.com/download/xstarthooks.zip
Не работает.
Re: Как проверить запущена ли программа?
Сообщение avmaksimov » Чт фев 19, 2009 10:09 pm
1. Спасибо за комплимент!
2. Проверил на калькуляторе. Да, есть баг, что на остановку процесса не всегда срабатывает событие! Зато на закрытие окна стабильно! Приложите задачу, чтобы понять, что не получается!
С уважением, Андрей.
Re: Как проверить запущена ли программа?
Сообщение Gennadiy » Пт фев 20, 2009 8:20 am
avmaksimov писал(а): 2. Проверил на калькуляторе. Да, есть баг, что на остановку процесса не всегда срабатывает событие! Зато на закрытие окна стабильно! Приложите задачу, чтобы понять, что не получается!
Например простой батник «cmd.bat»:
title Петров
cmd.exe
Запускает cmd с заголовком окна «Петров». Так вот, когда исчезает (закрывается) окно с таким именем, необходимо снова запустить cmd.bat.
Кстати, в таскманагере на вкладке «Приложения» это приложение будет «Петров»
Re: Как проверить запущена ли программа?
Сообщение kot1784 » Сб ноя 07, 2009 1:30 pm
Как вариант можно использовать действие «Найти окно» дальше ставить условие
[FindWindows1.Success]<>True
«Запуск программы»
End If
Так можно устроить проверку на запуск определенной программы через определенные промежутки времени.
Re: Как проверить запущена ли программа?
Сообщение Евгений » Ср янв 27, 2010 12:17 pm
Источник: automate-my-tasks.com