2012-10-23 7 views
0

OS 명령 (예 : Windows 용 sysinternals pssuspend)을 사용하지 않고 전체 Erlang 프로그램을 일시 중지/일시 중지하는 간단한 방법이 있습니까?Erlang 프로그램 전체 일시 중지/일시 중지

이상적으로는 외부 프로그램에서 반환 할 때 프로그램을 다시 시작하고 싶습니다.

+0

myscript.bat를에서

runmyscript() -> receive updatemodel-> os:cmd("start myscript.bat"), ... end. 

: 얼랑에서

: 결국 나는이 작업을 수행하려면 사용 pssuspend을 했습니까? – W55tKQbuRu28Q4xv

+0

두 모델이 있습니다. Erlang의 제어/통신 네트워크 모델 및 Matlab의 전기 네트워크 모델을 제공합니다. 전기 네트워크 모델이 업데이트되는 동안 Comms 모델을 일시 중지해야합니다. – atomh33ls

+0

Erlang을 Matlab 모델과 외부 세계 사이의 교량으로 사용한다고 가정합니다. Erlang 프로그램은 상호 통신하는 프로세스의 집합입니다. 따라서 통신 프로세스를 '일시 중지'모드로 전환하고 수신 메시지를 처리하지 마십시오. 당신은 커스텀 프로세스 (erlang 프로세스) 상태를 통해 그것을 할 수 있습니다. 들어오는 메시지를 손실하지 않으려면 메시지를 대기열에 저장하고 다시 시작한 후에 처리 할 수 ​​있습니다. – W55tKQbuRu28Q4xv

답변

0

내 질문에 대한 짧은 대답은 '아니오'라고 생각합니다.

모든 프로세스에 일시 중지 메시지를 보낼 수 있습니다. 그러나 프로세스가 중단 될 순서를 알기가 어렵고 많은 프로세스가 사용되는 경우 상대적으로 큰 시간 지연이 발생할 수 있습니다. 당신이 무엇을 원하는가를 들어

pssuspend werl.exe 
mycommands 
... 
pssuspend -r werl.exe 
exit 
0

마찬가지로 W55tKQbuRu28Q4xv는 프로세스를 "일시 중지"할 수 있다고 말했습니다.

일시 중지 된 동안 프로세스로 전송 된 모든 메시지를 손실없이 수행하려면 선택적 수신을 수행하십시오. 모든 메시지는 프로세스의 대기열을 수신에,있을 것

handle_info(pause, State) -> 
    receive 
     unpause -> 
      {noreply, State} 
    end; 

참고 : 프로세스는 다음과 같이 할 수있는 gen_server이라고 가정하면. 따라서 시스템 클럭 값에 따라 메시지를 처리하는 경우 시간 샘플링을 보낸 사람 프로세스로 이동해야합니다.

관련 문제