2014-11-22 7 views
0

Google 크롬처럼 실행중인 프로세스와 어떻게 통신 할 수 있는지 알고 싶습니다. 이미 Chrome 인스턴스가 있고 외부 링크 (내부 또는 외부 브라우저)를 클릭하면 새 탭이 열립니다.실행중인 프로세스와 어떻게 통신 할 수 있습니까?

그럼 내 질문은이 통신이 소켓이나 그런 것을 통해 일어나는 것입니까?

감사합니다.

+0

http://www.tldp.org/LDP/tlk/ipc/ipc.html "Linux 프로세스 간 통신"을위한 google입니다. –

+0

불량 사례입니다. [Chrome은 여러 프로세스로 실행됩니다.] (http://www.chromium.org/developers/design-documents/process-models). –

+0

@Shemhamforasch가 제시하는 것처럼 파이프 등을 사용할 수 있지만 일반적으로 GUI 프로그램은 운영 체제의 메시지 버스를 사용합니다. 또한 창과 같은 플랫폼에서 실행 프로그램에 내장 된 '창으로 실행'항목을 갖는 것이 일반적입니다. 나는 세부 사항을 모른다, 그래서 확실히 대답. – tdelaney

답변

0

thisthis을 결합하면 문제가 해결 될 것이라고 생각합니다. 기본적으로 실행중인 앱 (있는 경우)의 PID를 확인하고 표준 입력란에 쓸 수 있습니다. 해당 프로세스에 새로운 정보가 있다는 신호를 보낼 수 있습니다 (this가 도움이 될 것입니다).

소켓, 파이프, 메시지 및 공유 메모리 또한 좋은 대안이지만, 언뜻보기에는 이것이 가장 단순한 것처럼 보였습니다.

2

이것은 실제로 플랫폼에 따라 다릅니다. GTK +는 GtkApplication을 (GIO의 GApplication 클래스를 기반으로하는), Qt는 등, QtSingleApplication

GApplication이/GtkApplication는 기본적으로 최소한에 (A D-버스 이름을 제공하려고합니다 리눅스 저는 믿습니다 메커니즘이 플랫폼에있다가 매달린). 성공하면 원래 응용 프로그램이고, 그렇지 않으면 응용 프로그램이 이미 실행 중이고 D-Bus를 통해 응용 프로그램과 통신 할 수 있습니다.

+0

사실, 그건 내거야. 나는 서버를 프로그래밍하고 있는데 CLI를 사용하여 일부 설정을 변경할 수있다. 그런 다음 인터페이스를 제공하는 최선의 방법이 무엇인지 알고 싶습니다. –

+1

그렇다면 당신은 무엇이든지 당신을 위해 편리해야합니다. 내가 당신이라면, 아마 당신이 서버에 사용하고있는 것을 사용하게 될 것입니다. 서버가 HTTPd 인 경우 HTTP를 사용하십시오. 그것이 ZeroMQ라면, ZeroMQ 등을 사용하십시오. 네트워크 서버를 작성하고 있다면 로컬 포트에 바인드하십시오. D-Bus 서버를 작성하는 경우 D-Bus 등을 사용하십시오. 실제로이 작업을 수행 할 수있는 방법은 없으므로 일반적으로 기존 인프라를 활용하는 것이 가장 좋습니다. – nemequ

+0

답변 해 주셔서 감사합니다. 당신이 로컬 포트에 대해 말했을 때, 저는 조금만 검색하여 Unix Domain Sockets에 관한 것들을 발견했습니다. 이것은 로컬 어플리케이션에만 접근을 제한합니다. –

관련 문제