C как узнать pid процесса
Перейти к содержимому

C как узнать pid процесса

  • автор:

C как узнать pid процесса

>Подскажите, как программно узнать pid процесса, зная его имя?

если в linux, то
pidof programm

pidof programm — команда для командной строки. А как узнать в программе?

>pidof programm — команда для командной строки. А как узнать в
>программе?

посмотреть исходники pidof 🙂

посмотреть исходники pidof 🙂
Не подскажите где их можно найти?

>посмотреть исходники pidof 🙂
>Не подскажите где их можно найти?

А сам что?

coder@alt0 ~ $ rpm -qf =pidof —qf ‘%{URL}\n’
ftp://ftp.cistron.nl/pub/people/miquels/sysvinit

>>Подскажите, как программно узнать pid процесса, зная его имя?
>
>если в linux, то
>pidof programm

Вот вариант
FILE *p = popen(«pidof program», «r»);
//FILE *p = popen(«ps | grep program | cut -f1 -d ‘ ‘», «r»); // если нет pidof
if (p)
{
fread(. p);
pclose(p);
}
else perror(«»);

pidof шарится по /proc перебирая все процессы.

алость модефицировал pidof :

#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include

static int get_pid_of_process(char *process_name)
{
static kvm_t *kd = NULL;
struct kinfo_proc *p;
int i, n_processes, processes_found;

processes_found = 0;

if ((kd = kvm_open(«/dev/null», «/dev/null», «/dev/null», O_RDONLY, «kvm_open»)) == NULL)
(void)errx(1, «%s», kvm_geterr(kd));
else {
p = kvm_getprocs(kd, KERN_PROC_PROC, 0, &n_processes);
for (i = 0; i if ((strncmp(process_name, p[i].ki_comm, COMMLEN+1) == 0) && (getpid() != (int)p[i].ki_pid)) {

processes_found = (int)p[i].ki_pid;
}

kvm_close(kd);
}

return processes_found;
}

>[оверквотинг удален]
> for (i = 0; i > if ((strncmp(process_name, p[i].ki_comm, COMMLEN+1) == 0) && (getpid() !=
> (int)p[i].ki_pid)) {
> processes_found =
> (int)p[i].ki_pid;
> }
> kvm_close(kd);
> }
> return processes_found;
> }

А это не по теме?

Следующая программа показывает использование функции fork, где создаются две копии процесса, и они выполняются параллельно.

#include
#include
int main()
{ pid_t return_value;

printf(«Forking process\n»);
return_value=fork();
printf(«The process id is %d
and return value is %d\n»,
getpid(), return_value);
execl(«/bin/ls/»,»ls»,»-l»,NULL);
printf(«This line is not printed\n»);
}

>[оверквотинг удален]
> int main()
> { pid_t return_value;
> printf(«Forking process\n»);
> return_value=fork();
> printf(«The process id is %d
> and return value is %d\n»,
> getpid(), return_value);
> execl(«/bin/ls/»,»ls»,»-l»,NULL);
> printf(«This line is not printed\n»);
> }

А, виноват, не по теме:)

Узнать PID процесса

Подскажите пожалуйста, как узнать PID процесса зная его имя (например explorer’a). Пол интернета перерыл, функции все не рабочие.

Лучшие ответы ( 1 )
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:

Как узнать Handle или PID процесса, зная его имя и класс?
Как узнать Handle или PID процесса, зная его имя и класс?

Получить имя или pid родительского процесса
Имеется имя файла И pid процесса. Нужно узнать имя файла ИЛИ pid его родителя Добавлено через 3.

Узнать id родителя процесса
Как узнать id родителя процесса? Нашел информацию что можно вывести из структуры PROCESSENTRY32.

Как узнать имя запущенного процесса
Как узнать имя запущенного процесса и записать его имя в строку (LPWSTR)?

221 / 135 / 48
Регистрация: 12.04.2010
Сообщений: 248
Плохо рыл. Да и все функции наверняка рабочии
Ну например так:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
#include #include #include DWORD PIDByName(WCHAR * AProcessName) { HANDLE pHandle = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); PROCESSENTRY32 ProcessEntry; DWORD pid; ProcessEntry.dwSize = sizeof(ProcessEntry); bool Loop = Process32First(pHandle, &ProcessEntry); while (Loop) { if (wcsstr(ProcessEntry.szExeFile, AProcessName)) { pid = ProcessEntry.th32ProcessID; CloseHandle(pHandle); return pid; } Loop = Process32Next(pHandle, &ProcessEntry); } return 0; } //Используем int main(void) { DWORD pid; pid = PIDByName(L"explorer.exe"); return 0; }

C как узнать pid процесса

  • Скачать приложения для дома
  • Скачать приложения для бизнеса
  • Поддержка приложений для дома
  • Поддержка приложений для бизнеса

Бесплатные сервисы и утилиты

  • Проверить файл или ссылку
  • Бесплатные утилиты

Choose your language

Сменить язык

Нет результатов

Для всех приложений

Общие вопросы

Как узнать PID (идентификатор процесса) в Windows

Статья обновлена: 22 января 2019 ID: 6325

Вы можете узнать PID (идентификатор процесса) с помощью Диспетчера задач или командной строки.

Как узнать PID c помощью Диспетчера задач

  1. Нажмите Ctrl+Shift+Esc на клавиатуре.
  2. Перейдите на вкладку Процессы.
  3. Нажмите правой кнопкой мыши на заголовок таблицы и в контекстном меню выберите ИД процесса.

Отображение столбца с ИД процессов в Диспетчере задач

  1. Найдите нужный процесс.

В столбце ИД процесса будет отображен идентификатор процесса.

Как узнать PID процесса в Linux

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

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

Как узнать pid процесса Linux

1. ps

Самый распространённый способ узнать PID Linux — использовать утилиту ps:

ps aux | grep имя_процесса

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

ps aux | grep имя_процесса | grep -v grep

Например, узнаём PID всех процессов, имя которых содержит слово «Apache»:

ps aux | grep apache | grep -v grep

2. pgrep

Если вам не нужно видеть подробную информацию о процессе, а достаточно только PID, то можно использовать утилиту pgrep:

По умолчанию утилита ищет по командной строке запуска процесса, если нужно искать только по имени процесса, то надо указать опцию -f:

3. pidof

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

С помощью опции -s можно попросить утилиту выводить только один PID:

pidof -s apache2

4. pstree

Утилита pstree позволяет посмотреть список дочерних процессов для определённого процесса, также их pid-идентификаторы. Например, посмотрим дерево процессов Apache:

pstree -p | grep apache2

Как узнать PID скрипта

Когда вы запускаете скрипт в оболочке, например Bash запускается процесс известный как подоболочка и выполняет последовательно все команды скрипта. Чтобы узнать PID процесса подоболочки Bash, запущенной для скрипта, обратитесь к специальной переменной $$. Эта переменная доступна только для чтения, поэтому вы не сможете ее редактировать:

#!/bin/bash
echo «PID этого скрипта: $$»

Каким процессом занят файл Linux

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

С помощью утилиты lsof можно посмотреть, какие процессы используют директорию или файл в данный момент. Например, откроем аудио-файл в плеере totem, а затем посмотрим, какой процесс использует её файл:

В начале строки мы видим название программы, а дальше идёт её PID. Есть ещё одна утилита, которая позволяет выполнить подобную задачу — это fuser:

Здесь будет выведен только файл и PID процесса. После PID идёт одна буква, которая указывает, что делает этот процесс с файлом или папкой:

  • c — текущая директория;
  • r — корневая директория;
  • f — файл открыт для чтения или записи;
  • e — файл выполняется как программа;
  • m — файл подключен в качестве библиотеки.

Кто использовал файл в Linux

Узнать процесс, который сейчас занимает файл, достаточно просто. Но как узнать, какой процесс обращается к файлу не надолго, например, выполняет его как программу или читает оттуда данные? Эта задача уже труднее, но вполне решаема с помощью подсистемы ядра auditd. В CentOS набор программ для работы с этой подсистемой поставляется по умолчанию, в Ubuntu же его придётся установить командой:

sudo apt install auditd

Теперь создаём правило для мониторинга. Например, отследим, кто запускает утилиту who:

auditctl -w /usr/bin/who -p x -k who_exec

Здесь -w — адрес файла, который мы будем отслеживать, —p — действие, которое нужно отслеживать, —k — произвольное имя для правила. В качестве действия могут использоваться такие варианты:

Теперь выполним один раз who и посмотрим, что происходит в логе с помощью команды ausearch:

sudo ausearch -i -k who_exec

Здесь в секции SYSCALL есть PID процесса, под которым была запущена программа, а также PPID — программа, которая запустила нашу who. Копируем этот PID и смотрим информацию о нём с помощью ps:

ps aux | grep 15595

Становиться понятно, что это bash.

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

Иногда необходимо узнать PID Linux-программы, которая использует сетевой порт, например 80. Для этого можно использовать утилиту ss:

sudo ss -lptn ‘sport = :80’

Мы видим, что это несколько процессов Apache. Использовав опцию dport, можно узнать, какой процесс отправляет данные на указанный порт:

sudo ss -lptn ‘dport = :80’

Выводы

В этой статье мы рассмотрели, как узнать PID процесса в Linux по различным условиям: имени или файлу. Как видите, всё достаточно просто, и в считанные минуты можно можно понять, что происходит с вашей операционной системой, и какой процесс за это отвечает.

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

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