간단한 대답은 그렇지 않다는 것입니다. "단일 기능"을 구현했다고 말할 때 정확히 무슨 뜻인지 잘 모르겠습니다. 두 번째 프로세스의 코드가 첫 번째 프로세스의 싱글 톤 객체를 볼 수있을 것으로 예상하는 것처럼 보이지만 이는 분명히 불가능합니다. 하지만 오해했을 수도 있습니다.
이를 수행하는 일반적인 방법은 일반적으로 실행중인 프로세스의 프로세스 ID를 포함하는 알려진 위치에 고유 한 이름을 가진 파일을 만드는 것입니다. 프로그램을 시작하고 파일이 이미 존재하는 것을 본다면 사용자에게 이미 실행중인 복사본이 있음을 설명 할 수 있습니다. 또한 해당 프로세스에 신호를 보내 (어쨌든 Unix에서) 창을 포 그라운드로 가져 오도록 지시 할 수 있습니다.
아, 그리고 프로그램이 종료 될 때 PIDfile을 삭제해야한다는 것을 잊지 마세요. :-)
-------------------혼동, gtk.main
인상 할 KeyboardInterrupt
상기 신호 처리기는 모든 예외가 발생하는 경우 예외. 이 프로그램으로 :
import gtk
import signal
def ohno(*args):
raise Exception("Oh no")
signal.signal(signal.SIGUSR1, ohno)
gtk.main()
시작 후 os.kill(pid, signal.SIGUSR1)
다른 프로세스에서 호출 하면 다음 예외가 발생합니다.
File "signaltest.py", line 9, in <module>
gtk.main()
KeyboardInterrupt
이것은 pygtk의 문제인 것 같습니다 signal.signal
. 비 -gtk python 앱에서 핸들러에 의해 발생한 예외 는 예상 한 작업을 수행하고 핸들러의 예외를 표시합니다 (예 : "Oh no").
즉 , 다른 시그널에 대한 응답으로 gtk.main
가 발생 한다면 KeyboardInterrupt
시그널 핸들러가 자체 예외를 발생시키지 않는지 확인하십시오.
출처
https://stackoverflow.com/questions/22079937