28.04.2018, 14:14
|
#8
|
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.
Саму эту программу можно запускать вместо программ. Она убедится, что они не запущены и запустит их. Ещё можно так же убедиться, что они работают и, например, завершить их.
|
Спасибо, Дмитрий!
|
|
|