compare exename in process_start function
parent
b53a158f67
commit
bd9a588840
|
|
@ -138,6 +138,18 @@ int process_restart(const char *pidFilename)
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static const char *process_get_exename(const char* program)
|
||||||
|
{
|
||||||
|
const char *exename;
|
||||||
|
exename = strrchr(program, '/');
|
||||||
|
if (exename != NULL) {
|
||||||
|
return exename + 1;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
return program;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
int process_start(const char* pidFilename)
|
int process_start(const char* pidFilename)
|
||||||
{
|
{
|
||||||
pid_t pid;
|
pid_t pid;
|
||||||
|
|
@ -160,6 +172,7 @@ int process_start(const char* pidFilename)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (kill(pid, 0) == 0) {
|
if (kill(pid, 0) == 0) {
|
||||||
|
const char *exename1, *exename2;
|
||||||
cmdsz = sizeof(cmdline);
|
cmdsz = sizeof(cmdline);
|
||||||
cmdline[cmdsz-1] = argv0[cmdsz-1] = '\0';
|
cmdline[cmdsz-1] = argv0[cmdsz-1] = '\0';
|
||||||
sprintf(cmdfile, "/proc/%d/cmdline", pid);
|
sprintf(cmdfile, "/proc/%d/cmdline", pid);
|
||||||
|
|
@ -175,7 +188,11 @@ int process_start(const char* pidFilename)
|
||||||
cmdfile, errno, strerror(errno));
|
cmdfile, errno, strerror(errno));
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
if (strcmp(cmdline, argv0) == 0) {
|
exename1 = process_get_exename(cmdline);
|
||||||
|
exename2 = process_get_exename(argv0);
|
||||||
|
if (strcmp(exename1, exename2) == 0) {
|
||||||
|
fprintf(stderr, "process %s already running, pid: %d\n",
|
||||||
|
argv0, (int)pid);
|
||||||
return EEXIST;
|
return EEXIST;
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue