С++ ПРОВЕРКА - ЗАПУЩЕН ЛИ ПРОЦЕСС В 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