Страниц: [1]
  Печать  
Автор Тема: Запущен ли процесс? qnx 6.5  (Прочитано 1250 раз)
Zaca
Jr. Member
**
Offline Offline

Сообщений: 63



Просмотр профиля
« : Ноября 09, 2016, 10:00:11 am »

Добрый день,

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

Сообщений: 872



Просмотр профиля WWW
« Ответ #1 : Ноября 09, 2016, 11:07:01 am »

Утилиты QNX ищут процесс в /proc . Похоже другого пути нет.
Записан

Zaca
Jr. Member
**
Offline Offline

Сообщений: 63



Просмотр профиля
« Ответ #2 : Ноября 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 за ответ. Хотя бы не буду тратить время на попытку что-то найти
Записан
da-nie
Full Member
***
Offline Offline

Сообщений: 167



Просмотр профиля
« Ответ #3 : Ноября 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);
}
Записан

И день и ночь в пути
ob1
Hero Member
*****
Offline Offline

Сообщений: 629


What has two thumbs up and doesn't give a crap?


Просмотр профиля WWW
« Ответ #4 : Ноября 10, 2016, 10:36:56 am »

Так-так, стиль верблюда уже как бы намекает. Да и ещё использование new/delete вместо malloc()/free() в коде на C. Даже не стоит и говорить, что динамическое выделение памяти тут вообще не нужно. Неужели это из экзаменационной работы на поступление в ад? А-аттестован!!!
Записан
AG
QOR.Moderator
*****
Offline Offline

Сообщений: 872



Просмотр профиля WWW
« Ответ #5 : Ноября 10, 2016, 11:03:37 am »

Так-так, стиль верблюда уже как бы намекает. Да и ещё использование new/delete вместо malloc()/free() в коде на C. Даже не стоит и говорить, что динамическое выделение памяти тут вообще не нужно. Неужели это из экзаменационной работы на поступление в ад? А-аттестован!!!

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

ob1
Hero Member
*****
Offline Offline

Сообщений: 629


What has two thumbs up and doesn't give a crap?


Просмотр профиля WWW
« Ответ #6 : Ноября 10, 2016, 11:19:30 am »

Можно было и пройти мимо, но я же не равнодушный, стараюсь помочь, когда могу, по мере сил.

А какающие люди со снятыми штанами Вам давно мерещатся? Впрочем, отвечать не надо, тут я бессилен помочь, могу только посочувствовать.
Записан
da-nie
Full Member
***
Offline Offline

Сообщений: 167



Просмотр профиля
« Ответ #7 : Ноября 11, 2016, 06:08:29 am »

Цитировать
Так-так, стиль верблюда уже как бы намекает.

Что, простите?  Cool Телеграмма "Приветствуем только сорок, желаем новой весны" столь же информативна. Wink Чего вы сказать-то хотели? Smiley
Динамическое выделение памяти много где не нужно, но ничто его не мешает использовать. В данном случае, оно использовано. Не хотите использовать - создайте обычный массив. Всё в ваших руках. Smiley
« Последнее редактирование: Ноября 11, 2016, 06:30:53 am от da-nie » Записан

И день и ночь в пути
Страниц: [1]
  Печать  
 
Перейти в: