crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )


  Ответ в ( Linux ) получить имя процесса по его PID, или по PID получить имя процесса
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
 

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
ЙаМайскЫйПчОЛ Дата 9.12.2009, 15:38
  смирись с этим... и живи счастливо дальше.. пока ты находишься на стадии отрицания
carveau Дата 9.12.2009, 15:38
  Спасибо, в ссылке нашел файлы в которые смотреть надо, а то уже минут 40 ползаю по этим исходникам )))

int read_cmdline(char *restrict const dst, unsigned sz, unsigned pid)
{
char name[32];
int fd;
unsigned n = 0;
dst[0] = '\0';
snprintf(name, sizeof name, "/proc/%u/cmdline", pid);
fd = open(name, O_RDONLY);
if(fd==-1) return 0;
**********************************
так же сделано cmdline читает !!! да не может быть что бы в Linuxe небыло чего нибудь такого API - шного что бы без чтения cmdline обойтись !!!

если уж блин не суждено тогда вообще через QProcess сделаю, буду pidof <имя_процесса> запускать ....
ЙаМайскЫйПчОЛ Дата 9.12.2009, 15:19
  Ну тогда от меня напоследок http://www.unix.com/high-level-programming...s-pid-name.html
запусти ps из своей программы... с ключом поиска по имени и пропарси ввывод ... ))) мы же не ищем легких путей
Удачи
carveau Дата 9.12.2009, 15:15
  ну напоследок можно постораться :-)
ЙаМайскЫйПчОЛ Дата 9.12.2009, 15:13
  О_о
Погоня за оценкой не доведет до бобра
carveau Дата 9.12.2009, 15:11
  да, потому что все решение сводится к простому чтению из файла ! не оценят !
ЙаМайскЫйПчОЛ Дата 9.12.2009, 15:08
  и ты не хочешь пробегать все дерево процессов с целью поиска в cmdline имени процесса??
Хотя мне кажется что это самый прямой способ...
Любое решение которое ты найдешь ИМХО будет основанно на все том же переборе дерева процессов... но будет в красивой(может быть) упаковке в виде системной функции
carveau Дата 9.12.2009, 15:07
  да, так точно.
Вижу два варианта решения.
1) по имени процесса получить его PID, если процесса нет то и мы ни какого PID соответственно не получим
2) по PID получить имя процесса, обходим весь каталог /proc/номер - и есть список всех PID - ов в системе

да делать так не нравится, потому что пишу дипломку, и преподователь не оценит легкость решения этой задачи !!!
ДА есть плюс у этого метода, он будет не зависим от возраста линуксовых библиотек !!!
ЙаМайскЫйПчОЛ Дата 9.12.2009, 15:00
  carveau, давай ещё раз тебе по имени процесса надо узнать работает он или нет?

И делать так тебе не нравиться?
#include <dirent.h>
#include <string.h>
#include <stdlib.h>
#include <stdio.h>

int main(int argc, char** argv)
{
   if (argc < 2)
   {
      fprintf(stderr, "Usage: %s <process name>\n", argv[0]);
      return 1;
   }

   const char* directory = "/proc";
   size_t      taskNameSize = 1024;
   char*       taskName = calloc(1, taskNameSize);

   DIR* dir = opendir(directory);

   if (dir)
   {
      struct dirent* de = 0;

      while ((de = readdir(dir)) != 0)
      {
         if (strcmp(de->d_name, ".") == 0 || strcmp(de->d_name, "..") == 0)
            continue;

         int pid = -1;
         int res = sscanf(de->d_name, "%d", &pid);

         if (res == 1)
         {
            // we have a valid pid

            // open the cmdline file to determine what's the name of the process running
            char cmdline_file[1024] = {0};
            sprintf(cmdline_file, "%s/%d/cmdline", directory, pid);

            FILE* cmdline = fopen(cmdline_file, "r");

            if (getline(&taskName, &taskNameSize, cmdline) > 0)
            {
               // is it the process we care about?
               if (strstr(taskName, argv[1]) != 0)
               {
                  fprintf(stdout, "A %s process, with PID %d, has been detected.\n", argv[1], pid);
               }
            }

            fclose(cmdline);
         }
      }

      closedir(dir);
   }

   // just let the OS free this process' memory!
   //free(taskName);

   return 0;
}
Kagami Дата 9.12.2009, 14:38
  Мм... а никто еще не предлагал посмотреть исходники утилиты ps?
Просмотр темы полностью (откроется в новом окне)
RSS Текстовая версия Сейчас: 28.3.2024, 17:47