Показать сообщение отдельно
Старый 28.04.2018, 14:14   #8
maks
Senior Member
 
Регистрация: Dec 2012
Сообщения: 164
Благодарил(а): 5 раз(а)
Поблагодарили: 1 раз в 1 сообщении
По умолчанию Ответ: Как отследить работу своей программы

Цитата:
Сообщение от Gromov Посмотреть сообщение
Я когда-то делал на с++ такие вещи. Вот вам код, тут всё просто

Код:
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <string>
#include <stdio.h>
#include <stdlib.h>
#include <cstring>
#include <sys/time.h>
#include <ctime>
#include <locale.h>
#include <fstream>

#define timesec 10
#define timensec 1000 //loop задержка цикла

#define marx_num 3 // Количество программ

using namespace std;

#pragma GCC diagnostic ignored "-Wwrite-strings"

int main(int argc, char *argv[]){
    struct timespec tw = {timesec,timensec*100000};
    struct timespec tr;

    // Здесь указываются названия программ
    std::string name[marx_num] = {"my_app1", "my_app2","my_app3"};
    std::string temp;
    for (;;){
    	nanosleep (&tw, &tr);

    	for (int i = 0; i < marx_num; ++i)
    	{
    		temp = "pidof " + name[i];
    		if (system(temp.c_str()) > 0 ){
    			printf("%s не работает, перезапуск\n", name[i].c_str());
    			temp = "nohup /projects/workdir/" + name[i] + "/" + name[i] + "&";
    			system(temp.c_str());
    		} else
    		printf("%s работает\n", name[i].c_str());
    	}    	
    }
}
Тут программы лежат в папке workdir, и далее, каждая в своей папке. Например /projects/workdir/my_app1/my_app1 - путь до бинарника.

В рабочей версии нужно закомментить выводы в консоль printf.

Саму эту программу можно запускать вместо программ. Она убедится, что они не запущены и запустит их. Ещё можно так же убедиться, что они работают и, например, завершить их.
Спасибо, Дмитрий!
maks вне форума   Ответить с цитированием