QNX.ORG.RU

Разработка => Программирование под QNX => Тема начата: Zaca от Ноября 09, 2016, 10:00:11 am



Название: Запущен ли процесс? qnx 6.5
Отправлено: Zaca от Ноября 09, 2016, 10:00:11 am
Добрый день,

При старте программы запускаю драйвер (spawnp). Чтобы их не плодить, хотелось бы убедиться, что драйвер еще не запущен. Как получить по имени pid процесса? Не хотелось бы идти по пути анализа \proc, со списком всех запущенных процессов - может есть какой-то более элегантный способ? Спасибо.


Название: Re: Запущен ли процесс? qnx 6.5
Отправлено: AG от Ноября 09, 2016, 11:07:01 am
Утилиты QNX ищут процесс в /proc . Похоже другого пути нет.


Название: Re: Запущен ли процесс? qnx 6.5
Отправлено: Zaca от Ноября 09, 2016, 01:15:02 pm
ну тогда так http://www.qnx.com/developers/docs/6.5.0SP1.update/com.qnx.doc.neutrino_cookbook/s3_procfs.html

Спасибо AG за ответ. Хотя бы не буду тратить время на попытку что-то найти


Название: Re: Запущен ли процесс? qnx 6.5
Отправлено: da-nie от Ноября 09, 2016, 06:55:43 pm
Я делал так:

Код:
int GetProcessPID(char *Name)
{
 DIR *dirp;
 dirent *dire;
 if ((dirp = opendir( "/proc" )) == NULL) return(-1);
 while(1)
 {
  if ((dire=readdir(dirp))==NULL) break;
  if (isdigit(dire->d_name[0]))
  {
    int pid=strtoul(dire->d_name,NULL,0);
    char *buffer=new char[PATH_MAX];
    sprintf(buffer,"/proc/%d/as",pid);  
    int fd=open(buffer,O_RDONLY);
    if (fd>=0)
    {
     dinfo_s dinfo;
     int res=devctl(fd,DCMD_PROC_MAPDEBUG_BASE,&dinfo,sizeof(dinfo),NULL);
     close(fd);
     if (res==EOK)
    {
     if (!strcmp(Name, basename(dinfo.info.path)))
     {
      delete[](buffer);
      closedir(dirp);
      return(pid);
     }
    }      
   }
   delete[](buffer);        
  }
 }
 closedir(dirp);  
 return(-1);
}


Название: Re: Запущен ли процесс? qnx 6.5
Отправлено: ob1 от Ноября 10, 2016, 10:36:56 am
Так-так, стиль верблюда уже как бы намекает. Да и ещё использование new/delete вместо malloc()/free() в коде на C. Даже не стоит и говорить, что динамическое выделение памяти тут вообще не нужно. Неужели это из экзаменационной работы на поступление в ад? А-аттестован!!!


Название: Re: Запущен ли процесс? qnx 6.5
Отправлено: AG от Ноября 10, 2016, 11:03:37 am
Так-так, стиль верблюда уже как бы намекает. Да и ещё использование new/delete вместо malloc()/free() в коде на C. Даже не стоит и говорить, что динамическое выделение памяти тут вообще не нужно. Неужели это из экзаменационной работы на поступление в ад? А-аттестован!!!

Можно было пройти мимо и не накакать? Подумайте в следующий раз когда захочется снять штаны что люди все таки видят кто это сделал. В подворотне всегда есть шанс на анонимность, но не в форуме. ;-)


Название: Re: Запущен ли процесс? qnx 6.5
Отправлено: ob1 от Ноября 10, 2016, 11:19:30 am
Можно было и пройти мимо, но я же не равнодушный, стараюсь помочь, когда могу, по мере сил.

А какающие люди со снятыми штанами Вам давно мерещатся? Впрочем, отвечать не надо, тут я бессилен помочь, могу только посочувствовать.


Название: Re: Запущен ли процесс? qnx 6.5
Отправлено: da-nie от Ноября 11, 2016, 06:08:29 am
Цитировать
Так-так, стиль верблюда уже как бы намекает.

Что, простите?  8) Телеграмма "Приветствуем только сорок, желаем новой весны" столь же информативна. ;) Чего вы сказать-то хотели? :)
Динамическое выделение памяти много где не нужно, но ничто его не мешает использовать. В данном случае, оно использовано. Не хотите использовать - создайте обычный массив. Всё в ваших руках. :)