← Назад к вопросам

Как найти процесс по слову в названии?

1.6 Junior🔥 172 комментариев
#Linux

Комментарии (2)

🐱
deepseek-v3.2PrepBro AI6 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Поиск процесса по ключевому слову в названии: практические методы

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

Основные подходы для Linux/Unix-систем

В Unix-подобных системах стандартным инструментом является команда ps (process status) в сочетании с grep для фильтрации.

Базовый пример поиска:

ps aux | grep "nginx"

Эта команда:

  • ps aux — выводит список всех процессов с детальной информацией (пользователь, PID, использование ресурсов).
  • grep "nginx" — фильтрует строки, содержащие слово "nginx".

Ключевые варианты использования ps:

# Поиск по точному имени процесса
ps -C nginx

# Поиск процессов конкретного пользователя
ps -u deploy | grep java

# Комбинация с `pgrep` (более специализированный инструмент)
pgrep -f "nginx master"

Для получения более структурированной информации часто используют pstree или htop в интерактивном режиме.

Методы для Windows

В Windows эквивалентом является tasklist и PowerShell.

С использованием командной строки:

tasklist | findstr "chrome"

Более мощный подход через PowerShell:

Get-Process | Where-Object {$_.ProcessName -like "*chrome*"}

Это позволяет использовать богатые возможности фильтрации PowerShell, включая поиск по Description или Id.

Для служб Windows:

Get-Service | Where-Object {$_.DisplayName -like "*SQL*"}

Программный поиск в скриптах автоматизации

В скриптах Python для кросс-платформенной автоматизации можно использовать модуль subprocess или специализированные библиотеки.

Пример на Python для Unix:

import subprocess

def find_process_by_name(name):
    try:
        output = subprocess.check_output(['ps', 'aux'], text=True)
        lines = [line for line in output.split('\n') if name in line]
        return lines
    except subprocess.CalledProcessError as e:
        return f"Error: {e}"

Пример на Python для Windows:

import psutil  # Кроссплатформенная библиотека

def find_processes_by_keyword(keyword):
    processes = []
    for proc in psutil.process_iter(['name', 'pid', 'cmdline']):
        try:
            if keyword.lower() in proc.info['name'].lower():
                processes.append(proc.info)
        except (psutil.NoSuchProcess, psutil.AccessDenied):
            pass
    return processes

Библиотека psutil является оптимальным выбором для кросс-платформенных задач автоматизации, предоставляя единый API.

Проблемы и лучшие практики

  • Псевдо-ложные совпадения: Сам процесс grep будет присутствовать в выводе. Решение — использовать grep -v grep или pgrep.
  • Различие между ProcessName и Command Line: Например, Java процесс может иметь имя java, но ключевое слово "Spring" будет только в аргументах командной строки. Для этого нужен поиск по полной команде (ps auxf или pgrep -f).
  • Права доступа: Некоторые процессы могут быть не видны без соответствующих прав (например, sudo в Linux или административные права в Windows).
  • Эффективность в скриптах: Для частого мониторинга лучше использовать специализированные инструменты типа supervisord или systemd вместо постоянного polling через ps.

Инструменты мониторинга для QA автоматизации

В рамках QA Automation поиск процессов часто интегрируется в:

  • Скрипты подготовки/очистки тестового окружения (убедиться, что старые процессы сервисов остановлены).
  • Health-check этапы в CI/CD (проверить, что необходимые микросервисы запущены после деплоя).
  • Сбор логов и диагностики при падении тестов (определить, какие процессы были активны в момент ошибки).

Пример интеграции в тестовый сценарий:

import pytest
import psutil

@pytest.fixture(autouse=True)
def ensure_clean_environment():
    # Перед тестом проверяем отсутствие конфликтующих процессов
    for proc in psutil.process_iter(['name']):
        if "test_server" in proc.info['name']:
            proc.terminate()
    yield
    # После теста гарантируем остановку всех наших процессов
    for proc in psutil.process_iter(['name']):
        if "temp_service" in proc.info['name']:
            proc.kill()

Таким образом, выбор метода поиска процесса по слову зависит от ОС, требуемой точности и контекста автоматизации. Для скриптов поддержки и мониторинга рекомендуется использовать кроссплатформенные библиотеки типа psutil, а для быстрой ад-hoc диагностики — соответствующие системные команды (ps/grep или tasklist/findstr).