Я пытаюсь найти, работает ли процесс на основе идентификатора процесса. Код выглядит следующим образом, основываясь на одном из сообщений на форуме. Я не могу рассматривать имя процесса, поскольку существует несколько процессов, работающих под тем же именем.

Def findProcess(processId): ps= subprocess.Popen("ps -ef | grep "+processId, shell=True, stdout=subprocess.PIPE) output = ps.stdout.read() ps.stdout.close() ps.wait() return output def isProcessRunning(processId): output = findProcess(processId) if re.search(processId, output) is None: return true else: return False 1111 72312 72311 0 0:00.00 ttys000 0:00.00 /bin/sh -c ps -ef | grep 71676 1111 72314 72312 0 0:00.00 ttys000 0:00.00 grep 71676

Он всегда возвращает true, поскольку он может найти идентификатор процесса в выходной строке.

Какие-либо предложения? Спасибо за любую помощь.

11 Solutions collect form web for “Проверьте, запущен ли процесс в Python (в Linux / Unix)”

Пытаться:

Os.kill(pid, 0)

Должен преуспеть (и ничего не делать), если процесс существует, или выбросить исключение (которое вы можете поймать), если процесс не существует.

Самый простой ответ, на мой взгляд (albiet, возможно, не идеальный), – это изменить

Ps -ef | grep

Для того, чтобы:

Ps -ef | grep | grep -v grep

Это будет игнорировать список процессов для поиска grep, содержащий PID процесса, который вы пытаетесь найти.

По-видимому, ответ пользователя9876 гораздо более «питонический».

Это немного kludge, но на * nix вы можете использовать os.getpgid (pid) или os.kill (pid, sig), чтобы проверить наличие идентификатора процесса.

Import os def is_process_running(process_id): try: os.kill(process_id, 0) return True except OSError: return False

EDIT: Обратите внимание, что os.kill работает в Windows (с Python 2.7), а os.getpgid не будет . Но версия Windows вызывает TerminateProcess () , которая «безоговорочно заставит процесс выйти», поэтому я предсказываю, что он не будет безопасно возвращать нужную вам информацию, фактически не убив процесс, если он существует.

Если вы используете Windows, сообщите нам об этом, потому что ни одно из этих решений не приемлемо в этом сценарии.

Вы можете проверить, существует ли папка / proc / .

>>> import os.path >>> os.path.exists("/proc/0") False >>> os.path.exists("/proc/12") True

См. Так: Как вы проверяете Linux с Python, если процесс все еще запущен?

Если вы не возражаете против использования внешнего модуля, я бы предложил psutil . Это кросс-платформенный и простой в использовании, чем нерестовая подоболочка только с целью поиска текущего процесса.

Если этот процесс принадлежит одному и тому же пользователю, процесс проверки, вы можете просто попытаться его kill . Если вы используете сигнал 0, kill не отправит ничего, но все же позволит вам узнать, доступен ли этот процесс.

Если sig равно 0, то сигнал не отправляется, но проверка ошибок все еще выполняется; это можно использовать для проверки наличия идентификатора процесса или идентификатора группы процессов.

Это должно соответствующим образом распространяться на методы python.

Я знаю, что это старо, но я использовал это и, похоже, работает; вы можете быстро адаптироваться к преобразованию из имени процесса в идентификатор процесса:

Try: if len(os.popen("ps -aef | grep -i "myprocess" | grep -v "grep" | awk "{ print $3 }"").read().strip().split("\n")) > 1: raise SystemExit(0) except Exception, e: raise e

В Windows другой вариант – использовать tasklist.exe:

Синтаксис: tasklist.exe / NH / FI "PID eq processID"

Def IsProcessRunning(processId): ps= subprocess.Popen(r"tasklist.exe /NH /FI "PID eq %d"" % (processId), shell=True, stdout=subprocess.PIPE) output = ps.stdout.read() ps.stdout.close() ps.wait() if processId in output: return True return False

В Windows вы можете использовать WMI.

From win32com.client import GetObject GetObject("winmgmts:").ExecQuery("Select * from Win32_Process where ProcessId = " + str(pid)).count

Вы также можете использовать другие фильтры. Например, я, скорее всего, просто хочу сказать, работает ли процесс по имени и предпринимает действия. Например, если DbgView не запущен, запустите его.

If not GetObject("winmgmts:").ExecQuery("Select * from Win32_Process where Name = "dbgview.exe"").count: subprocess.Popen(r"C:\U\dbgview.exe", shell=False)

Вы также можете перебирать и делать другие интересные вещи. Полный список полей находится здесь.

Недавно мне пришлось перечислить текущие процессы и так:

Def check_process(process): import re import subprocess returnprocess = False s = subprocess.Popen(["ps", "ax"],stdout=subprocess.PIPE) for x in s.stdout: if re.search(process, x): returnprocess = True if returnprocess == False: print "no process executing" if returnprocess == True: print "process executing"

Вы должны найти его дважды.

ps -ef | grep 71676 | sed "s/71676//" | grep 71676

Если это возвращает True то это действительно работает!

Мне нравятся инструменты WMIC и TASKLIST , но они недоступны в домашних/основных версиях окон. Другим способом является использование команды QPROCESS , доступной почти на всех машинах Windows (для тех, которые имеют терминальные службы - Я думаю, что только выиграть XP без SP2, так что практически каждый компьютер Windows):

@echo off:check_process setlocal if "%~1" equ "" echo pass the process name as forst argument && exit /b 1:: first argument is the process you want to check if running set process_to_check=%~1:: QPROCESS can display only the first 12 symbols of the running process:: If other tool is used the line bellow could be deleted set process_to_check=%process_to_check:~0,12% QPROCESS * | find /i "%process_to_check%" >nul 2>

QPROCESS команда не так сильна, как TASKLIST и ограничена отображением всего 12 символов имя процесса, но следует учитывать, если TASKLIST недоступно.

Более простое использование, когда оно использует имя, если процесс как аргумент (суффикс.exe является обязательным в этом случае, когда вы передаете исполняемое имя):

@echo off:check_process setlocal if "%~1" equ "" echo pass the process name as forst argument && exit /b 1:: first argument is the process you want to check if running:: .exe suffix is mandatory set "process_to_check=%~1" QPROCESS "%process_to_check%" >nul 2>&1 && (echo process %process_to_check% is running) || (echo process %process_to_check% is not running) endlocal

Различие между двумя способами использования QPROCESS заключается в том, что QPROCESS * отобразит все процессы, а QPROCESS some.exe будет фильтровать только процессы для текущего пользователя.

Использование WMI объектов через окна script host exe вместо WMIC также является опцией. Он должен также запускаться на всех машинах Windows (исключая те, где WSH выключен, но это редкий случай). Вот файл bat, который перечисляет все процессы через классы WMI и может использоваться вместо QPROCESS в script выше (это гибрид jscript/bat и должен быть сохранен как.bat):

@if (@X)==(@Y) @end /* JSCRIPT COMMENT ** @echo off cscript //E:JScript //nologo "%~f0" exit /b ************** end of JSCRIPT COMMENT **/ var winmgmts = GetObject("winmgmts:\\\\.\\root\\cimv2"); var colProcess = winmgmts.ExecQuery("Select * from Win32_Process"); var processes = new Enumerator(colProcess); for (;!processes.atEnd();processes.moveNext()) { var process=processes.item(); WScript.Echo(process.processID + " " + process.Name); }

И модификация, которая будет проверять, запущен ли процесс:

@if (@X)==(@Y) @end /* JSCRIPT COMMENT ** @echo off if "%~1" equ "" echo pass the process name as forst argument && exit /b 1:: first argument is the process you want to check if running set process_to_check=%~1 cscript //E:JScript //nologo "%~f0" | find /i "%process_to_check%" >nul 2>&1 && (echo process %process_to_check% is running) || (echo process %process_to_check% is not running) exit /b ************** end of JSCRIPT COMMENT **/ var winmgmts = GetObject("winmgmts:\\\\.\\root\\cimv2"); var colProcess = winmgmts.ExecQuery("Select * from Win32_Process"); var processes = new Enumerator(colProcess); for (;!processes.atEnd();processes.moveNext()) { var process=processes.item(); WScript.Echo(process.processID + " " + process.Name); }

Эти два параметра можно использовать на машинах без TASKLIST .

Конечная техника использует MSHTA . Это будет работать на всех машинах Windows с XP и выше и не зависит от настроек Windows script. вызов MSHTA может немного снизить производительность (опять же нужно сохранить как bat):

@if (@X)==(@Y) @end /* JSCRIPT COMMENT ** @echo off setlocal if "%~1" equ "" echo pass the process name as forst argument && exit /b 1:: first argument is the process you want to check if running set process_to_check=%~1 mshta "about:" | find /i "%process_to_check%" >nul 2>&1 && (echo process %process_to_check% is running) || (echo process %process_to_check% is not running) endlocal exit /b ************** end of JSCRIPT COMMENT **/ var fso= new ActiveXObject("Scripting.FileSystemObject").GetStandardStream(1); var winmgmts = GetObject("winmgmts:\\\\.\\root\\cimv2"); var colProcess = winmgmts.ExecQuery("Select * from Win32_Process"); var processes = new Enumerator(colProcess); for (;!processes.atEnd();processes.moveNext()) { var process=processes.item(); fso.Write(process.processID + " " + process.Name + "\n"); } close();


Иногда ошибки d3dx11_43.dll и другие системные ошибки DLL могут быть связаны с проблемами в реестре Windows. Несколько программ может использовать файл d3dx11_43.dll, но когда эти программы удалены или изменены, иногда остаются "осиротевшие" (ошибочные) записи реестра DLL.

В принципе, это означает, что в то время как фактическая путь к файлу мог быть изменен, его неправильное бывшее расположение до сих пор записано в реестре Windows. Когда Windows пытается найти файл по этой некорректной ссылке (на расположение файлов на вашем компьютере), может возникнуть ошибка d3dx11_43.dll. Кроме того, заражение вредоносным ПО могло повредить записи реестра, связанные с Microsoft® DirectX for Windows®. Таким образом, эти поврежденные записи реестра DLL необходимо исправить, чтобы устранить проблему в корне.

Редактирование реестра Windows вручную с целью удаления содержащих ошибки ключей d3dx11_43.dll не рекомендуется, если вы не являетесь специалистом по обслуживанию ПК. Ошибки, допущенные при редактировании реестра, могут привести к неработоспособности вашего ПК и нанести непоправимый ущерб вашей операционной системе. На самом деле, даже одна запятая, поставленная не в том месте, может воспрепятствовать загрузке компьютера!

В связи с подобным риском мы настоятельно рекомендуем использовать надежные инструменты очистки реестра, такие как WinThruster (разработанный Microsoft Gold Certified Partner), чтобы просканировать и исправить любые проблемы, связанные с d3dx11_43.dll. Используя очистку реестра , вы сможете автоматизировать процесс поиска поврежденных записей реестра, ссылок на отсутствующие файлы (например, вызывающих ошибку d3dx11_43.dll) и нерабочих ссылок внутри реестра. Перед каждым сканированием автоматически создается резервная копия, позволяющая отменить любые изменения одним кликом и защищающая вас от возможного повреждения компьютера. Самое приятное, что устранение ошибок реестра может резко повысить скорость и производительность системы.


Предупреждение: Если вы не являетесь опытным пользователем ПК, мы НЕ рекомендуем редактирование реестра Windows вручную. Некорректное использование Редактора реестра может привести к серьезным проблемам и потребовать переустановки Windows. Мы не гарантируем, что неполадки, являющиеся результатом неправильного использования Редактора реестра, могут быть устранены. Вы пользуетесь Редактором реестра на свой страх и риск.

Перед тем, как вручную восстанавливать реестр Windows, необходимо создать резервную копию, экспортировав часть реестра, связанную с d3dx11_43.dll (например, Microsoft® DirectX for Windows®):

  • Нажмите на кнопку Начать .
  • Введите "command " в строке поиска... ПОКА НЕ НАЖИМАЙТЕ ENTER !
  • Удерживая клавиши CTRL-Shift на клавиатуре, нажмите ENTER .
  • Будет выведено диалоговое окно для доступа.
  • Нажмите Да .
  • Черный ящик открывается мигающим курсором.
  • Введите "regedit " и нажмите ENTER .
  • В Редакторе реестра выберите ключ, связанный с d3dx11_43.dll (например, Microsoft® DirectX for Windows®), для которого требуется создать резервную копию.
  • В меню Файл выберите Экспорт .
  • В списке Сохранить в выберите папку, в которую вы хотите сохранить резервную копию ключа Microsoft® DirectX for Windows®.
  • В поле Имя файла введите название файла резервной копии, например "Microsoft® DirectX for Windows® резервная копия".
  • Убедитесь, что в поле Диапазон экспорта выбрано значение Выбранная ветвь .
  • Нажмите Сохранить .
  • Файл будет сохранен с расширением.reg .
  • Теперь у вас есть резервная копия записи реестра, связанной с d3dx11_43.dll.
  • Следующие шаги при ручном редактировании реестра не будут описаны в данной статье, так как с большой вероятностью могут привести к повреждению вашей системы. Если вы хотите получить больше информации о редактировании реестра вручную, пожалуйста, ознакомьтесь со ссылками ниже.

    Пользователь компьютера на операционной системе Windows может столкнуться с проблемой запуска игр, релиз которых состоялся после 2011-го года. В сообщении об ошибке говорится об отсутствующем файле динамической библиотеки d3dx11_43.dll. В статье будет рассказано, почему эта ошибка появляется и как с ней бороться.

    Чтобы избавиться от проблемы, вы можете воспользоваться тремя самыми действенными способами: установить пакет программного обеспечения, в котором присутствует нужная библиотека, провести инсталляцию DLL-файла с помощью специального приложения или же поместить его в систему самостоятельно. Обо всем будет рассказано дальше по тексту.

    Способ 1: DLL-Files.com Client

    С помощью программы DLL-Files.com Client получится в кратчайшее время исправить ошибку, связанную с файлом d3dx11_43.dll.

    Вот что вам нужно для этого сделать:


    После выполнения всех пунктов инструкции в систему будет помещен отсутствующий файл d3dx11_43.dll, следовательно, ошибка будет устранена.

    Способ 2: Установка DirectX 11

    Изначально файл d3dx11_43.dll попадает в систему при установке DirectX 11. Этот пакет программного обеспечения должен идти с той игрой или программой, которая выдает ошибку, но по какой-то причине он не был инсталлирован или же пользователь ввиду незнания повредил нужный файл. В принципе, причина не важна. Для исправления ситуации понадобится установить DirectX 11, но для начала нужно загрузить инсталлятор этого пакета.

    Чтобы корректно провести его загрузку, следуйте инструкции:


    Загрузив установщик DirectX на компьютер, запустите его и выполните следующее:


    Теперь DirectX 11 установлен в системе, следовательно, библиотека d3dx11_43.dll тоже.

    Как говорилось в самом начале этой статьи, библиотеку d3dx11_43.dll можно загрузить на ПК самостоятельно, после чего установить. Этот способ также дает стопроцентную гарантию устранения ошибки. Процесс установки выполняется посредством копирования файла библиотеки в системную директорию. В зависимости от версии ОС, эта директория может называться по-разному. Точное название вы сможете узнать из

    Из данного руководства узнаете, что нужно сделать, чтобы скачать d3dx11_43.dll на компьютер с Windows 7 – 10 и почему следует удержаться от соблазна загрузить эту библиотеку со сторонних сайтов.

    D3dx11_43.dll появился в последнем выпуске DirectX 11 – это набор библиотек, которые позволяют упростить работу программистам по созданию софта (чаще всего игр и мультимедийных приложений) на платформе Windows. Для конечного пользователя это значит, что без нужных файлов он не запустит созданную с применением технологии игру или программу.

    Тот, у кого на компьютере установлена более старая версия программного обеспечения или DirectX не установлен, наверняка столкнётся с ошибкой: «Программа не может быть выполнена, так как на ПК отсутствует d3dx11_43.dll». Исправить её можно двумя способами:

    • официальный (надёжный) – заключается в обновлении DirectX для вашей системы;
    • придуманный пользователями интернета – загрузка библиотеки отдельным файлом и её копирование (в нашем случае распаковка с архива) в папку с игрой.

    Рассмотрим их оба, но прежде пару слов о самой библиотеке. Она включает в себя новые функции, константы и процедуры, позволяющие сделать картинку более реалистичной и оптимизировать рендеринг трехмерных сцен. В частности, это функции для экспорта и обработки текстур высокого разрешения, работа с картинками и шейдерами.

    Подготовка

    Сначала необходимо проверить, какая версия программного обеспечения установлена на компьютере. Сомнений в том, что ваш графический ускоритель поддерживает DX 11 нет, убеждаться в этом не будем.

  • Открываем интерфейс командного интерпретатора комбинацией Win + R , вводим строку «dxdiag» и выполняем её кнопкой «ОК» или клавишей Enter .
  • Опускаемся в самый низ первой вкладки и смотрим на цифры у последней записи.
  • Если на компьютере стоит 11-я версия, возможно, нам поможет второй способ поможет. Велика вероятность того, что компонент был случайно удалён или используемый для установки игры репак сделан кривыми руками. В случае с отсутствием какой-либо информации об имеющемся DX или наличии 10-й версии поможет только инсталляция всего набора библиотек. Сначала рассмотрим, как установить DX11.

    Обновление

    Самый интересный момент заключается в том, что разработчики перестали создавать автономные установщики DirectX, начиная с 10-й версии. Обзавестись DX 10-12 можно только при помощи веб-установщика, загруженного с сайта корпорации.

    Обновить 12-й выпуск пакета при использовании совместимой видеокарты и Windows 10 можно ещё и через Центр обновлений.

  • Бесплатно и без подвохов (в виде загрузчиков, отправки СМС и тому подобное) скачать 11-й DirectX можно с сайта Майкрософт по ссылке .
  • На странице кликаем по выпадающему списку и выбираем язык интерфейса программы, после чего щёлкаем «Скачать».
  • На компьютере появится исполняемый файл объемом в 300 килобайт.

  • Запускаем exe-шник и разрешаем системе безопасности его выполнение.
  • В первом окне лучше отказаться от поисковой панели Bing.
  • Дожидаемся завершения анализа и определения отсутствующих/поврежденных компонентов и кликаем «Далее».

  • Завершаем функционирование приложения и можем играть.

  • Перезагрузка ПК не нужна, однако при повторном появлении ошибки она может помочь.

    Таким образом проблема решается для d3dx10_43.dll и вообще любого компонента данного API.

    Если и это не подействовало, опускаемся к следующей инструкции.

    Исправляем недоработку репака

    Ошибка – это, скорее всего, следствие неумелой перепаковки игры или создания portable-версии приложения. Но это небольшая беда, ничего заново скачивать не придётся. Мы загрузим d3dx10_43.dll, поместим его в папку с исполняемым файлом, который данную библиотеку в системной директории не находит. Не всегда, но многим такое решение помогает.

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



    Эта статья также доступна на следующих языках: Тайский

    • Next

      Огромное Вам СПАСИБО за очень полезную информацию в статье. Очень понятно все изложено. Чувствуется, что проделана большая работа по анализу работы магазина eBay

      • Спасибо вам и другим постоянным читателям моего блога. Без вас у меня не было бы достаточной мотивации, чтобы посвящать много времени ведению этого сайта. У меня мозги так устроены: люблю копнуть вглубь, систематизировать разрозненные данные, пробовать то, что раньше до меня никто не делал, либо не смотрел под таким углом зрения. Жаль, что только нашим соотечественникам из-за кризиса в России отнюдь не до шоппинга на eBay. Покупают на Алиэкспрессе из Китая, так как там в разы дешевле товары (часто в ущерб качеству). Но онлайн-аукционы eBay, Amazon, ETSY легко дадут китайцам фору по ассортименту брендовых вещей, винтажных вещей, ручной работы и разных этнических товаров.

        • Next

          В ваших статьях ценно именно ваше личное отношение и анализ темы. Вы этот блог не бросайте, я сюда часто заглядываю. Нас таких много должно быть. Мне на эл. почту пришло недавно предложение о том, что научат торговать на Амазоне и eBay. И я вспомнила про ваши подробные статьи об этих торг. площ. Перечитала все заново и сделала вывод, что курсы- это лохотрон. Сама на eBay еще ничего не покупала. Я не из России , а из Казахстана (г. Алматы). Но нам тоже лишних трат пока не надо. Желаю вам удачи и берегите себя в азиатских краях.

    • Еще приятно, что попытки eBay по руссификации интерфейса для пользователей из России и стран СНГ, начали приносить плоды. Ведь подавляющая часть граждан стран бывшего СССР не сильна познаниями иностранных языков. Английский язык знают не более 5% населения. Среди молодежи — побольше. Поэтому хотя бы интерфейс на русском языке — это большая помощь для онлайн-шоппинга на этой торговой площадке. Ебей не пошел по пути китайского собрата Алиэкспресс, где совершается машинный (очень корявый и непонятный, местами вызывающий смех) перевод описания товаров. Надеюсь, что на более продвинутом этапе развития искусственного интеллекта станет реальностью качественный машинный перевод с любого языка на любой за считанные доли секунды. Пока имеем вот что (профиль одного из продавцов на ебей с русским интерфейсом, но англоязычным описанием):
      https://uploads.disquscdn.com/images/7a52c9a89108b922159a4fad35de0ab0bee0c8804b9731f56d8a1dc659655d60.png