2011-03-11 7 views
4

나는 erlang 응용 프로그램 : * .app 파일과 일부 * .erl 파일이 있습니다. 나는 그들 모두를 컴파일한다. 터미널에서 나는 erl을 시작하고 거기에 application:start(my_application)., 모두 괜찮지 만, 만약 내가 너무 터미널 응용 프로그램을 닫습니다. 어떻게하면 터미널없이 응용 프로그램을 실행할 수 있습니까?터미널없이 erlang 응용 프로그램 실행

감사합니다.

답변

9

-noshell 옵션을 erl에 사용하고 싶을 것입니다. 구문은 귀하의 경우

erl -noshell -s Module Function Arguments 

그래서입니다,이 (당신이 유닉스/리눅스에있는 경우, 예를 들어)이 백그라운드 프로세스로 응용 프로그램을 시작하고 떠날 당신을 허용해야

erl -noshell -s application start my_application 

수 있습니다 실행 중입니다.

유용한 변형 중 하나는 모듈의 stop/0 함수를 호출하여 Erlang 환경이 함수 실행을 마칠 때 중지되도록하는 것입니다. 이것은 단순한 일회용 함수를 실행하고 출력을 다른 프로세스로 파이프하려면 편리합니다.

따라서, 예를 들어, more에 파이프에 당신은, 당신이 또한 의미가있는 경우가 아니라 컴파일 된 코드보다 스크립트와 같은 얼랑 코드를 실행하는 escript 명령을 사용할 수 있습니다

erl -noshell -s mymodule myfunction -s init stop | more 

마지막으로 할 수있는 너의 상황을 위해.

희망이 있습니다.

3

이 상황을 처리하는 올바른 방법은 앱이 포함 된 릴리스를 작성하고 시스템을 임베디드 앱으로 실행하는 것입니다. 이 릴리스는 완전히 독립적입니다 (erts와 kernel, std, mnesia 등의 모든 libs 파일을 보유합니다). 시작시 새 프로세스가 셸 프로세스에 연결되지 않습니다. OS 프로세스이므로 파이프로 연결할 수 있습니다. 모든 스크립트는 OTP에 포함됩니다. 여기에 몇 가지 정보가 있습니다 : http://www.erlang.org/doc/design_principles/release_structure.html 복잡한 것처럼 보일 수 있지만 철근과 같은 도구는 모든 것을합니다.