LINUX.ORG.RU

popen("ps -A | grep MyprogName","r"); Или писать парзер для /proc.

OxiD ★★★★
()

При запуске открывать сокет в абстрактном пространстве имён :))).

bugmaker ★★★★☆
()

В начале работы программы создавай lock-файл (в конце удаляй его). Если файл существует значит программа уже запущена. Обычно так поступают демоны.

mgk
()

lock-файл не супер решение ибо блокирует повторный запуск при возможном аварийном падении (глюки или питание рубанут) :(

anonymous
()

+ pid процесса если lock-файл существует а пида в списке процесов нет значит прога упала, или еще точнее если pid есть проверить этим ли процесом открыт lock-файл

anonymous
()

про сокет подробней можно ?

anonymous
()

>>проверить этим ли процесом открыт lock-файл А как это сделать ? Что-то у меня никаких вариантов :(

anonymous
()

Вот, именно из-за такого гимора я и предложил юзать system(). Посмотри мой пост.

OxiD ★★★★
()

Семафор тебе поможет. IPC.

anonymous
()

>> про сокет подробней можно ? 

смотри:

#include <stdio.h>                                                              
#include <sys/types.h>                                                          
#include <sys/socket.h>                                                         
#include <sys/un.h>                                                             
#include <errno.h>                                                              
#include <string.h>                                                             
#include <sys/poll.h>                                                           
#include <unistd.h> 


#define SOCKET_NAME "THERE_ARE_SUPER_PUPER_SOCKET_HERE"
#ifndef UNIX_PATH_MAX                                                           
  #define UNIX_PATH_MAX (108)                                                   
#endif
#define MIN(A,B) A<B?A:B

int main (int argc, char ** argv) {
  struct sockaddr_un SockAddr;
  int AddrLen;
  int Socket = socket (PF_UNIX, SOCK_STREAM, 0);                                    
  if (Socket == -1) {                                                           
    printf ("unable to open communication socket because of %s, quitting\n", strerror (errno));                                                                 
    exit (-1);                                                                  
  } else {                                                                      
    SockAddr.sun_family = AF_UNIX;                                              
    memset (&SockAddr.sun_path, 0, UNIX_PATH_MAX);                              
    memcpy (&SockAddr.sun_path [1], SOCKET_NAME, MIN (strlen (SOCKET_NAME), UNIX_PATH_MAX));
    AddrLen = sizeof (SockAddr);                                                
    if (bind (Socket, (struct sockaddr *) &SockAddr, AddrLen)) {                
      printf ("unable to bind socket because of %s, quitting\n", strerror (errno));                                                                             
      exit (-1);                                                                
    }
  }
  // any other stuff here
}

при повторном запуске выдаст
unable to bind socket because of Address already in use, quitting

к тому же через этот сокет с прогой могут общаться другие проги :)

смотри man unix

bugmaker ★★★★☆
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.