2016-09-29 4 views
1

부팅 할 때 외부 Node.js 서버를 생성하고 종료 할 때 종료하는 Elixir 앱 (GenServer 사용)을 만들고 있습니다. Node.js 서버를 성공적으로 시작할 수는 있지만 종료 할 수는 없습니다.시작된 외부 프로세스를 종료하는 방법은 무엇입니까?

그래서 내 질문은 심지어 Porcelain 패키지, 내가 외부 프로세스를 종료 할 수있는 방법 을 : 나는 현재 사용하려고했습니다 내가 엘릭서에서 시작 했어? ElixirForum


Relevant Discussion

답변

0

좋아, Unix Signals and Traps에 대한 몇 가지 연구를하고 Elixir ForumErlang Mailing List 및 토론에 많은 이메일을 통과 한 후, 그것은 밝혀 :

때 프로세스가 종료되면 (포트가 닫힌 경우) 생성 된 프로그램/포트 은 STDINEOF이됩니다. 프로세스가 포트가 닫힌 시간을 감지하는 "표준"방법입니다. STDIN의 파일 끝입니다.

다른 프로그램은 정상적으로 STDIN 및 종료에 EOF을 처리해야합니다. 이것은 대부분의 프로그램에서 작동하지만 Node.js 서버의 경우에는 발생하지 않습니다.

process.stdin.on('end',() => { 
    console.log("STDIN closed"); 
    process.exit(); 
}); 

난 아직도 살인을 강제 할 수있는 방법이 있어야한다고 생각

(즉, 하나 SIGINT 또는 SIGTERM를 보낼) 엘릭서에서 외부 프로그램을 : 그래서 수동으로 응용 프로그램 종료에이 사건을 처리했다/얼랭

+0

일반 goon 실행 파일이있는 도자기 라이브러리는 일반적인 경우에이 문제를 처리하는 한 가지 방법입니다. –

+0

@FredtheMagicWonderDog를 사용하여 예제를 만들 수 있습니까? 'goon' 드라이버로'SIGTERM' 또는'SIGINT'를 어떻게 보내면됩니까? – Sheharyar

+0

goon 실행 파일은 본질적으로 Porcelain 라이브러리의 메시지를 받아 들여 표준 신호를 구현하는 래퍼입니다. –

관련 문제