다음과 같은 시나리오가 있습니다. 두 개의 프로그램이 있는데, 하나는 백그라운드에서 실행되고 다른 하나는 앞에서 실행됩니다. 나중 프로그램은 이전 프로그램을 위해 어떤 일을 하고 있습니다. 백그라운드 프로그램이 필요한 구성을 완료하면 첫 번째 프로그램에 대한 백업 지원이 완료되었으며 이제 포그라운드 프로그램을 종료해야 한다는 신호를 보내고 백그라운드 프로그램이 첫 번째 프로그램을 제어하게 됩니다.
도움말은 매우 중요합니다. Linux에서 이 시나리오를 어떻게 수행할 수 있습니까? 어떤 방향이나 조언이라도 높이 평가하겠습니다.
답변1
지정된 요구 사항을 이해하는 것은 어렵습니다. 따라서 먼저 추가 설명이 필요한 부분을 설명하겠습니다.
이 게시물을 "마이그레이션"으로 표시했으므로 이러한 프로그램이 이미 존재하고 일부 비 Linux 아키텍처에서 실행되는 것으로 알려져 있다고 가정합니다. 프로세스 간 통신 및 신호 전달의 개념은 상당히 일반적이지만 현재 실행 중인 프로그램의 아키텍처와 운영 체제를 설명하는 것은 매우 도움이 될 것입니다.
텍스트에는 두 가지 다른 프로세스만 언급되어 있지만 "멀티스레딩" 레이블도 표시됩니다. 두 프로그램 모두 실제로 멀티스레드인가요?
나는 처음에 쉘에 의해 시작된 포그라운드 및 백그라운드 프로세스와 관련된 "이전"과 "이후"를 생각했습니다(표시됨). 그러나 이는 프로세스 자체 간의 관계가 아니라 프로세스가 시작되는 메커니즘과의 관계입니다.
나는 당신이 매개변수 입력을 위한 GUI를 제공하는 "프런트엔드" 프로그램을 언급하고 있다고 생각하며, 해당 매개변수가 "백엔드" 프로그램에 전달되면 자동으로 그렇게 됩니다. 프런트 엔드는 피드백이나 결과를 제공하기 위해 GUI를 다시 사용할 수 있을 때까지 잠시 멈춰야 할 수도 있습니다.
주요 문제는 두 프로그램 간의 매개변수 통신입니다. 내가 아는 방법은 공유 메모리, 파이프 스트림(예: 명명되지 않은 파이프, 명명된 파이프 또는 소켓)입니다. 신호는 데이터 스트림이 아닌 이벤트에서만 작동합니다. 계속하려면 기존 메커니즘을 이해해야 합니다.
한 프로그램이 다른 프로그램을 "제어"하는 것은 불가능합니다. 상위-하위 관계가 있을 수 있지만(프런트엔드 또는 백엔드가 상위일 수 있음) 관계는 되돌릴 수 없습니다. 상위 프로세스의 기능은 상위 프로세스와 하위 프로세스 간의 통신을 미리 조정하는 것입니다. 또는 상위 프로세스가 서로 통신할 수 있는 두 하위 프로세스(형제)를 시작할 수도 있습니다.
상위 프로세스나 하위 프로세스는 서로 신호를 보낼 수 있으며 실제로 각 신호는 다른 프로세스를 종료할 수 있습니다. 관계를 종료하는 보다 일반적인 방법은 관계 사이의 의사소통 라인을 닫는 것입니다. 이는 종료 프로세스에서 완전한 종료를 제공할 수 있는 기능을 제공합니다.
이러한 프로그램을 이미 소유하고 있다면 현재 상호 작용하는 방식을 정확히 파악하여 가장 가까운 Linux 기능 일치를 추천할 수 있는 것이 도움이 됩니다. 다른 접근 방식이 더 적합할 수 있는데 기존 코드를 크게 변경해야 하는 모델을 제안하는 것은 의미가 없습니다.
Linux가 이러한 프로그램이 협력하는 데 필요한 환경을 제공할 수 있다는 것은 거의 확실합니다. 문제는 시뮬레이션해야 하는 기존 메커니즘에 대해, 실제로 프로그램의 소스 코드에 액세스할 수 있는지 여부와 해당 소스 코드가 작성된 언어에 대해 우리가 여전히 아무것도 모른다는 것입니다.