С++ ПРОВЕРКА - ЗАПУЩЕН ЛИ ПРОЦЕСС В LINUX?
Пока делал сервер обновления приложений, задался вопросом, как реализовать такую проверку на C++. Как обычно, перерыл весь интернет и не нашел ничего толкового, готового рецепта нет. Потом пришел к выводу, что зашел слишком уж издалека, а тут надо с другой стороны. Допустим, если у нас запущен какой-то процесс, тогда у него должен быть какой-то идентификационный номер, PID. Соответственно, мы можем попробовать найти PID по имени процесса. Если у нас это получится - значит, процесс запущен. Если нет, то нет. Ну и вот, наконец-то, поиски увенчались успехом и теперь у меня есть пример кода, достаточно простой для изучения и внедрения в будущие проекты.
nano fuckupMond.cpp
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <string.h>
int GetPIDbyName(char* pidName)
{
FILE *fp;
char pidofCmd[50]={0};
int pidValue=-1;
if(pidName != 0) {
strcpy(pidofCmd, "pidof ");
strcat(pidofCmd, pidName);
strcat(pidofCmd, "> /tmp/pidof");
system(pidofCmd);
fp = fopen("/tmp/pidof", "r");
fscanf(fp, "%d", &pidValue);
fclose(fp);
}
return pidValue;
}
int main()
{
for(;;){
sleep(3);
int madserverPid = GetPIDbyName("madserver") ;
if(madserverPid < 0) {
printf("madserver is not running. \r\n");
printf("madserver pid: %d\n", madserverPid);
printf("Starting madserver...\r\n");
system("nohup madserver &");
} else if(madserverPid > 0){
printf("madserver is already running. Nothing to do.\r\n");
printf("madserver pid: %d\n", madserverPid);
}
}
return 0;
}
g++ fuckupMond.cpp -o fuckupMond
