2017-05-11 7 views
0

내가 같은 코드 뭔가를 말 :파이썬은 프로세스가 (하지 하위 프로세스) 사망 할 수있는 방법

from multiprocessing import Process 

def pro_a():  
    #execute some code that runs a radio program 

def pro_b(): 
    #execute some code that keeps a GUI running 

. 
. 
. #some code 

if __name__ == '__main__': 
    Process(target=pro_a).start() 
    Process(target=pro_b).start() 
가 시작한 후 나는 이러한 프로세스를 끝낼 수있는 방법

? .end(), .quit(), .terminate() 그리고 매번, 명령 창에 'Process'객체에 '...'속성이 없습니다. (Linux)

내 특정 코드에서, 특정 중심 주파수에서 GNU 라디오를 실행 중입니다. 그런 다음 GUI에 푸시 할 때 중심 주파수를 업데이트 한 다음 프로세스를 닫고 다시 실행하여 새 중심 주파수가 사용되는 버튼을 가질 수있게하고 싶습니다. .

+1

'.terminate()'가 작동해야합니다. https://docs.python.org/2/lib를 참조하십시오. rary/multiprocessing.html # multiprocessing.Process.terminate. 프로세스를 종료하려고 시도하는 코드를 보여줍니다. – Barmar

+0

나는 메인 외부의 함수에서 종료하려고했는데 어떤 이유로 그것을 좋아하지 않았다. 내가 메인에서 종료하려고했을 때, 그것은 효과가 있었다. 내 callBack 함수를 다른 프로세스를 종료하려고합니다. 만약 내가 뭔가를 메인으로 돌려주는 기능을 갖게된다면 나는 생각할 것이다. 그러나 나는 그것에 대해서도 문제가있다. – BBEng

+0

변수가 'main' 외부의 범위에 없었기 때문에 문제가 가변 범위 였을 수도 있습니다. – Barmar

답변

1

코멘트 : 나는 당신이 os.kill(...를 사용하여 작업을 수행 할 수 있습니다 그것을 종료 ... 다른 프로세스에서

이 필요합니다.

os.kill (PID, SIG) 프로세스 PID에
송신 신호 SIG. 호스트 플랫폼에서 사용할 수있는 특정 신호에 대한 상수는 신호 모듈에 정의되어 있습니다. 예를 들어

:

os.kill(p.pid, signal.SIGTERM) 

: 문서의 processkill에 대한 경고를 조심.

if __name__ == '__main__': 
    p =Process(target=pro_a).start() 

당신은 예를 들어 그것을 할 수 있습니다
파이썬이 방법을 사용하면 문서 multiprocessing.Process.terminate


3.6.1», 당신은 None의 있음을이 .start()의 반환 값을 얻을 :

if __name__ == '__main__': 
    p= Process(target=pro_a) 
    p.start() 
    time.sleep(5) 
    p.terminate() 
+0

이것은 5 초 후에 프로세스를 종료합니다. 다른 프로세스의 버튼을 누른 후에 프로세스를 종료해야합니다. – BBEng

+0

@DamianConnors 그것은 단지 예일 뿐이며 원하는 기준을 사용할 수 있습니다. – Barmar