У меня есть следующий сценарий: у меня есть две программы, работающие одна в фоновом режиме и одна впереди. Задняя программа делает некоторые вещи для передней программы. как только задняя программа выполнила необходимую настройку, она сообщает, что завершила поддержку резервного копирования для первой программы, и теперь переднюю программу необходимо убить, и задняя программа возьмет на себя управление первой программой.

Помощь в том, как бы я выполнил этот сценарий в Linux. Любое направление или намек высоко ценится.

0
emaan daavis 17 Окт 2020 в 14:42
3
Если передняя программа убита, то задней программе нечем управлять? Чего вы на самом деле пытаетесь достичь, как взаимодействуют эти две программы и являются ли они собственным кодом (т.е. можете ли вы изменить их поведение по мере необходимости, чтобы выполнить это требование?)
 – 
Paul_Pedant
17 Окт 2020 в 23:15
Привет @Paul_Pedant, у меня есть программа, работающая впереди, и из передней программы запускается задняя программа, и как только задняя программа завершается, она сигнализирует первой программе, а затем запускается задняя программа, берет на себя управление первой программой, и первая программа убит.
 – 
emaan daavis
18 Окт 2020 в 13:42

1 ответ

Лучший ответ

Сложно понять указанное требование, поэтому сначала я попытаюсь показать, где могут потребоваться дополнительные пояснения.

Вы пометили этот пост как «Миграция», поэтому я предполагаю, что эти программы уже существуют и, как известно, работают на некоторых архитектурах, отличных от Linux. Концепции межпроцессного взаимодействия и сигнализации довольно универсальны, но было бы очень полезно указать архитектуру и ОС, на которых в настоящее время работают программы.

Я также вижу тег «многопоточность», хотя в тексте упоминаются только два разных процесса. Любая из программ действительно многопоточная?

Первоначально я считал, что «спереди» и «сзади» связаны с передним и фоновым процессом, запущенным оболочкой (также помеченным). Но это не настоящая связь между самими процессами, а только их связь с их механизмом запуска.

Я полагаю, вы имеете в виду «интерфейсную» программу, которая предоставляет графический интерфейс для ввода параметров, и как только они передаются «внутренней» программе, она работает автономно. Также возможно, что интерфейсную часть нужно будет только приостановить, пока графический интерфейс не сможет снова использоваться для предоставления отзывов или результатов.

Ключевым вопросом является передача параметров между двумя программами. Известные мне методы включают в себя: разделяемую память; конвейерные потоки (как безымянные каналы, именованные каналы или сокеты); и общие файлы. Сигналы подходят только для событий, а не для потоков данных. Существующий механизм должен быть понят, чтобы мы могли продолжить.

Программа не может «взять под контроль» другую. Могут существовать отношения родитель-потомок (и либо ваш внешний, либо внутренний интерфейс могут быть родителем), но отношения не могут быть обращены вспять. Функция родителя состоит в том, чтобы заранее организовать связь между родителем и дочерним элементом: в качестве альтернативы родитель может запустить двух дочерних элементов (братьев и сестер), которые могут общаться друг с другом.

Либо родитель, либо потомок могут сигнализировать друг другу, и фактически каждый сигнал может убить другой процесс. Более привычно заканчивать отношения, закрывая каналы связи между ними, что дает завершающей программе возможность аккуратного закрытия.

Если у вас уже есть эти программы, было бы очень полезно точно знать, как они взаимодействуют в настоящее время, чтобы можно было порекомендовать наиболее близкое соответствие функций Linux. Нет смысла предлагать модель, требующую серьезных изменений в существующем коде, когда гораздо лучше подходит другой подход.

Почти наверняка Linux может предоставить необходимую среду для совместной работы этих программ. Проблема в том, что мы до сих пор ничего не знаем о существующих механизмах, которые нужно было бы эмулировать, или о том, есть ли у вас доступ к исходникам программ и на каком языке они написаны.

0
Paul_Pedant 18 Окт 2020 в 23:34