diff --git a/shm_consumer/MESA_shm_consumer.c b/shm_consumer/MESA_shm_consumer.c index 486b7b3..a64096e 100644 --- a/shm_consumer/MESA_shm_consumer.c +++ b/shm_consumer/MESA_shm_consumer.c @@ -10,6 +10,7 @@ #include "MESA_shm_ring_queue.h" +#define BUFSIZE 256 void init_ring_queue_head_arrray(struct MESA_shm_overview *ovw, struct MESA_shm_queue_head **ring_queue_head) { int i = 0; @@ -57,8 +58,50 @@ void consumer_daemo() } return ; } -int main(int argc, char **args) +int consumer_is_running(char *process_name) { + FILE *fp = NULL; + char buf[BUFSIZE] = {0}; + int count = 0; + char command[BUFSIZE] = {0}; + if(process_name == NULL){ + return 0; + } + snprintf(command, sizeof(command), "ps -ef | grep %s | grep -v grep | wc -l", process_name); + fp = popen(command, "r"); + if(fp == NULL){ + return 0; + } + if((fgets(buf, sizeof(buf), fp)) != NULL){ + count = atoi(buf); + } + pclose(fp); + if(count > 1){ + return 1; + }else{ + return 0; + } + return 0; +} +char *get_exe_name(char *argv) +{ + char * p = NULL; + p = rindex(argv, '/'); + if(p == NULL){ + p = argv; + }else{ + p = p + 1; + } + return p; +} +int main(int argc, char **argv) +{ + + char *exe_name = get_exe_name(argv[0]); + if(consumer_is_running(exe_name)){ + printf("consumer process is already running\n"); + return 0; + } consumer_daemo(); int i = 0; struct MESA_shm_overview *shm_overview = NULL;