2009-11-18 5 views
1

우리는 GUI를 제어하고 실제 데이터 처리를 수행하는 프로세스를 생성하는 주 프로세스가있는 Qt를 사용하여 응용 프로그램을 준비하고 있습니다. 메시지는 Qt 메커니즘과 stdin/stdout 파이프를 사용하여 주 프로세스와 데이터 처리 프로세스간에 교환됩니다.QT에서 고아 프로세스로 다시 연결하기

이제 GUI가 충돌하는 경우 다른 프로세스가 계속 실행됩니다. 우리가 할 수 있기를 원하는 것은 새로운 GUI가 시작될 때 이전과 같이 이러한 프로세스에 다시 연결하는 것입니다. 이것이 가능한지 누구나 알고 있으며, 그렇다면 그것을 달성하는 방법은 무엇입니까?

답변

1

프로세스와 통신하기 위해 named pipe을 사용하는 경우 가능합니다. stdin/out은 속한 프로세스가 종료되면 닫힙니다.

+0

QProcess 클래스 객체가 stdin/stdout/stderr 파이프를 내부적으로 처리한다는 점만 제외하면. 대신 "명명 된 파이프"를 사용하려면 QProcess 클래스를 수정해야합니다. –

+0

QProcess를 사용해야한다고 말하지 않았습니다. 이 경우 QProcess를 통해 GUI 응용 프로그램으로 프록시 프로세스를 작성하십시오. 프록시는 GUI 애플리케이션만큼 오래 유지됩니다. QProcess :: read()/write()를 사용하여 GUI와 통신합니다. 이 프록시는 명명 된 파이프를 만들고 작업자 프로세스를 시작하고 파이프를 작업자의 stdin/out에 연결합니다. 또한 작업자가 사망하면 다시 시작됩니다. 프록시는 아마도 작은 쉘 스크립트처럼 단순 할 수 있습니다. – hirschhornsalz

0

프로세스 간의 통신을 위해 공유 메모리를 조사하고자 할 수 있습니다. 나는 그것이 이전 직업에서 매우 유사한 상황에서 회복 할 수 있었다는 것을 상기하는 것 같다.

플랫폼이 지원하는 경우 다른 프로세스 사이의 통신에 dbus를 사용하는 것도 가능합니다. 이 경우 어떤 프로세스도 거기에 있어야하지만 실행중인 경우 적절한 메시지를 얻으려고 행동합니다.