해당 컴퓨터에서 실행중인 다른 인스턴스를 인식하고 통신해야하는 프로그램을 작성해야합니다. 나는 리눅스에서 그것을 수행하는 정식 방법이 있는지 알고 싶다.프로세스가 동일한 프로그램의 다른 프로세스를 인식하도록 만드는 방법
저의 첫 번째 생각은 프로세스의 PID를 포함하는 파일을 작성하고 프로그램이 실행될 때마다 해당 파일을 찾는 것이지만 그 파일의 "올바른"장소와 이름은 어디에 있습니까? 더 나은, 또는 "올바른"방법이 있습니까?
그런 다음 사용자가 실행하려고했으나 다른 인스턴스가 있으므로 작업을 넘겨 종료합니다. SIGUSR1처럼 신호를 보내는 것만으로 생각했지만 사용자가 두 번째 프로세스를 실행 한 X11 디스플레이와 같은 더 많은 정보를 보낼 수는 없습니다. 이 정보를 보내는 방법?
프로그램이 Gtk와 연결되어있어 glib를 사용하는 솔루션이 괜찮습니다.
pid 파일만으로는 거의 쓸모가 없습니다. 응용 프로그램이 충돌하면 pid 파일을 삭제할 수 없으므로 수동으로 삭제해야합니다. 더 나은 옵션은 프로세스가 어떻게 든 끝날 때 OS가 항상 잠금을 해제하기 때문에 pid 파일을 잠그는 것입니다. 'ls -la'를 실행하면 잠금을 볼 수 없습니다. 유닉스 도메인 소켓 하나면 충분하다. –
@Maxim : False. 'unlink (...)'는 파일이 닫힌 후에 파일을 삭제합니다. 그래서'fd = open (path, ...); unlink (path);'는 임시 파일을 갖는 일반적인 트릭입니다. – Alexandru
@Alexandru : 거의 맞습니다. 임시 파일이 아니라 pid 파일에 대해 논의하고 있다는 사실을 놓쳤습니다. 응용 프로그램이 종료되기 전에 pid 파일을 제거하면 안됩니다. –