Форум программистов, компьютерный форум, киберфорум
C/С++ под Linux
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.69/26: Рейтинг темы: голосов - 26, средняя оценка - 4.69
0 / 0 / 0
Регистрация: 14.01.2009
Сообщений: 35

Как отследить из проги на Си завершение другой проги

16.01.2009, 13:32. Показов 5240. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть две программы, одна написана не мной и исходников нет (main),
вторую я пытаюсь написать сам для реализации ряда дополнительных функций (addon).
После запуска стартуют обе программы.
Мне необходимо добиться, что бы когда программа main завершается,
следом завершалась и моя программа, т.е. сделать что-то типа периодической проверки
работает ли программа main и как только программы main не станет среди процессов,
тут же вызвать завершение программы addon.


Подскажите, как это сделать?

Добавлено через 3 часа 18 минут 57 секунд
Ну помогите, пожалуйста!
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
16.01.2009, 13:32
Ответы с готовыми решениями:

Как делаются проги в Линуксе ?
Здравствуйте. Я программировал в Виндовсе в С++ Buildere . Недавно поставил Debian Gnome , и сейчас решил написать простейшую программу на...

Отследить запуск проги
Доброго времени суток! Мне тут нужно написать код для таких действий 1) отслеживание запуска программы 2)Label1->Caption=" тут...

Установил фотошоп, вместо проги установились другие проги (игры онлайн,браузеры,рекламы и т.д.)
Здравствуйте, уважаемые программисты или форумчане! Скачал и установил с одного сайта фотошоп, а во время установки начали устанавливаться...

12
Эксперт С++
 Аватар для XuTPbIu_MuHTAu
2256 / 771 / 25
Регистрация: 27.05.2008
Сообщений: 1,496
16.01.2009, 21:29
В твоей проге делаешь fork, в процессе - сыне(или отце,пофиг) запускаешь нужную прогу, в другом процессе вызываешь waitpid или что-либо из семейства вейтов
0
0 / 0 / 0
Регистрация: 14.01.2009
Сообщений: 35
16.01.2009, 22:51  [ТС]
Цитата Сообщение от XuTPbIu_MuHTAu Посмотреть сообщение
В твоей проге делаешь fork, в процессе - сыне(или отце,пофиг) запускаешь нужную прогу, в другом процессе вызываешь waitpid или что-либо из семейства вейтов
Нет, к сожалению, такой вариант не подходит, я не могу управлять запуском основной проги, она стартует автоматом.

Обрисую картину более подробно:
есть устройство под управлением линукс, в качестве графической среды выступает
PicoGui Server(аналог иксов в линукс) внутри этого сервера работает основная программа, разработанная производителем (она реализует менюшки и основные функции по работе с устройством).
Таким образом процесс выглядит следующим образом:
- включается устройство;
-стартует линукс;
-стартует PicoGui Server
-стартует основная прога (main), которая подсоединяется к этому серверу;
-затем стартует моя прога, она тоже подсоединяется к этому серверу;

Проблема в следующем, когда устройство выключается, то сначала
завершается работа основной программы, а затем завершается работа сервера,
но сервер не может выключится, пока от него не отключится мое дополнение,
мне нужно из моего дополнения как-то узнать, когда завершилась основная программа, что-бы следом реализовать выключение моей программы.
0
UNIX-way
 Аватар для Delphin_KKC
712 / 495 / 49
Регистрация: 15.01.2009
Сообщений: 1,720
16.01.2009, 23:07
Почитай http://citforum.univ.kiev.ua/p... x/signals/ в плане сигнала SIGTERM. Если я правильно помню - он посылается ОСью всем прогам при завершении ОСи.
0
0 / 0 / 0
Регистрация: 14.01.2009
Сообщений: 35
17.01.2009, 01:15  [ТС]
Цитата Сообщение от Delphin_KKC Посмотреть сообщение
... в плане сигнала SIGTERM. Если я правильно помню - он посылается ОСью всем прогам при завершении ОСи....
Вариант красивый, но к сожалению не подошел, я немного не так представлял работу этой системы, сейчас попробовал этот вариант и убедился, что в момент выключения устройства,
оно переходит в режим стенбай, т.е. да основная программа и PicoGui server завершают работу,
а вот сама операционная система не выключается, а соответственно она не посылает
сигнала SIGTERM, а значит моей программе нечего ловить.

Покопавшись в скриптах нашел вот такие строки:
C++
1
2
if [ `pidof newcs mgcamd | wc -w` != 0 ] ; then
  killall -9 mgcamd newcs
насколько я понял, этот скрипт проверяет запущены ли две программы и если они запущены, то их убивает.

Нельзя ли что-то подобное сделать из программы на си и если можно, то насколько это будет критично для нагрузки на процессор?

Господа программисты, подскажите действенный вариант.
0
UNIX-way
 Аватар для Delphin_KKC
712 / 495 / 49
Регистрация: 15.01.2009
Сообщений: 1,720
17.01.2009, 12:14
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#include <string.h>
#include <err.h>
#include <kvm.h>
#include <sys/param.h>
#include <sys/sysctl.h>
#include <sys/user.h>
#include <sys/param.h>
#include <fcntl.h>
#include <stdlib.h>
#include <sysexits.h>
 
static int get_pid_of_process(char *process_name)
{
    static kvm_t *kd = NULL;
    struct kinfo_proc *p;
    int i, n_processes, processes_found;
 
    processes_found = 0;
    
    if ((kd = kvm_open("/dev/null", "/dev/null", "/dev/null", O_RDONLY, "kvm_open")) == NULL) 
             (void)errx(1, "%s", kvm_geterr(kd));
    else {
        p = kvm_getprocs(kd, KERN_PROC_PROC, 0, &n_processes);
        for (i = 0; i<n_processes; i++)
            if ((strncmp(process_name, p[i].ki_comm, COMMLEN+1) == 0) && (getpid() != (int)p[i].ki_pid)) {
 
          processes_found = (int)p[i].ki_pid;
            }
 
        kvm_close(kd);
    }    
 
    return processes_found;
}
Если get_pid_of_process вернёт ноль - знач процесс не найден - можешь завершаться Просто проверяй например раз в 100 мс наличие процесса.
З.Ы. За исходник в этом его виде спасибо cnupm.
1
0 / 0 / 0
Регистрация: 14.01.2009
Сообщений: 35
17.01.2009, 18:16  [ТС]
Кажется это мне подходит.
Спасибо.
Буду пробовать.
0
Программист TH
 Аватар для DanUnited
292 / 147 / 12
Регистрация: 06.01.2009
Сообщений: 537
17.01.2009, 18:52
о жесть...
А как вам способ включить, позыбзить в WinSight32 и использовать FindFindow(..)???
0
UNIX-way
 Аватар для Delphin_KKC
712 / 495 / 49
Регистрация: 15.01.2009
Сообщений: 1,720
17.01.2009, 19:16
Цитата Сообщение от DanUnited Посмотреть сообщение
о жесть...
А как вам способ включить, позыбзить в WinSight32 и использовать FindFindow(..)???
Не рулит. Ибо мы про Линукс
0
1 / 1 / 0
Регистрация: 12.02.2009
Сообщений: 11
12.02.2009, 08:08
А что значит "стартует автоматом"? Найти, где стартует, и поставить там свою прожку (вариант - переименовать файл исходной программы и записать под его видом свою). Из своей (в сыновнем процессе) запустить вторую. Ну и waitpid где-то... :-)
Другой вариант, надо найти, как узнать об отключении "устройства" (по-моему лучшее).
Третий вариант - внести исправления в задачу и задаться другой >:-)
0
0 / 0 / 0
Регистрация: 14.01.2009
Сообщений: 35
12.02.2009, 09:29  [ТС]
Цитата Сообщение от indefini Посмотреть сообщение
А что значит "стартует автоматом"? Найти, где стартует, и поставить там свою прожку (вариант - переименовать файл исходной программы и записать под его видом свою). Из своей (в сыновнем процессе) запустить вторую. Ну и waitpid где-то... :-)
Другой вариант, надо найти, как узнать об отключении "устройства" (по-моему лучшее).
Третий вариант - внести исправления в задачу и задаться другой >:-)
Ваш совет мне не подходит. Программа работает на спутниковом ресивере.
Та прога, что стартует автоматом - находится во внутреннем флэше рессивера
в области для чтения вместе с скриптом ее запускающим, поэтому изменить оригинальную программу (переименовать или заменить) пока нельзя.
Второй вариант тоже не совсем подходит: да я отслеживаю нажатие
кнопки вкл/выкл., но устройство иногда включается и выключается от внутреннего
таймера, т.е. кнопку на нем никто не нажимает, а отследить события
таймера пока тоже не знаю как.
0
1 / 1 / 0
Регистрация: 12.02.2009
Сообщений: 11
13.02.2009, 19:25
Некотороые возможности.
/sys/devices/ ... /power/state . Устройство полностью включено == там 0 (текстом).
Файл устройства (типо /dev/receiver0, имя, скорее всего, другое). Наверное, есть какой-нибудь ioctl определения текущего состояния.
Ну и /proc/... Там на каждую задачу по каталогу. Имя каталога - process id :-) Есть ссылка на исполняемый файл задачи: /proc/<process_id>/exe ... Значит, надо найти каталог с нужной программой и следить.
(кстати, полезно сделать эти каталоги доступными только пользователю-владельцу, и даже невидимыми другим. По умолчанию чтение доступно для всех. У себя я лично изменил эту ситуацию (путём изменений в ядре)).

Добавлено через 21 минуту 42 секунды
Ещё программы, бывает, специально помечают, что они работают путём создания где-нибудь небольших файлов (типо lock). Они их могут проверять чтобы, скажем, узнать, не запущены ли они во второй раз :-) (это может быть где-нибудь в каталоге /var, или /tmp).
0
0 / 0 / 0
Регистрация: 14.01.2009
Сообщений: 35
14.02.2009, 12:57  [ТС]
Спасибо, буду пробовать.
Про power/state - каталог скрыт производителем или отсутствует.
А proc вы имеете ввиду просматривать этот каталог на наличие нужной проги?
Тогда наверное стоит делать некий цикл, который с периодичностью, например, раз в 1 секунду
будет проверять каталог.
Насколько такая периодическая проверка загрузит систему и как это реализовать программно?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
14.02.2009, 12:57
Помогаю со студенческими работами здесь

Как вызвать Dll из другой проги
имеется dll написанная на С# using System; using System.Collections.Generic; using System.Linq; using System.Text; ...

как запустить прогу из другой проги
Доброе всем время суток вопрос в следующем : У меня есть 3-ри небольших консольных приложения и есть необходимость сделать их вызов из...

Подскажите как перенести проги на другой диск
Два диска на маке, на одном SSD мало места хочу перенести проги и другую инку связанную с OS X и прописать другой путь к программам, КАК...

Можно ли отследить работу portable проги на компе
Добрый день! Хочу задать такой вопрос: можно ли отследить работу portable проги на компе? (да/нет) Ситуация: на работе заставили...

Как отследить завершение одного метода и по окончании его запустить другой
Как отследить завершение одного метода и по окончании его запустить другой?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru