2011-04-08 5 views
2

이전 응용 프로그램 인스턴스가 이미 실행 중인지 확인할 수있는 C 코드를 작성하는 방법이 있습니까? 리눅스와 윈도우에서 이식성있는 방법으로 이것을 체크 할 필요가있다. 둘 다 GCC의 마지막 버전을 사용할 수있다.응용 프로그램이 이미 실행 중인지 확인하는 방법은 무엇입니까? C 휴대용 Linux/Win

이식 가능한 코드의 예는 엄청난 도움이 될 것입니다. 지금 두 가지 옵션이 있습니다 :

  1. 프로세스 목록을 확인하십시오. 여기 리눅스는 좋은 툴을 가지고 있지만, 같은 기능이 윈도우에 적용되지는 않는다고 생각합니다. 어쩌면 양쪽 GN을위한 라이브러리일까요? 어떤 라이브러리 또는 기능?
  2. 파일을 저장하고 잠급니다. 자, 두 시스템이 이해할 수있는 방식으로이를 수행하는 방법은 무엇입니까? 한 가지 문제는 파일을 저장할 위치입니다. 경로 트리는 각 시스템과 다릅니다. 또한 상대 경로를 선택하면 서로 다른 디렉토리에있는 서로 다른 잠긴 파일로 두 개의 응용 프로그램을 계속 실행할 수 있습니다.

고마워요! Beco.

PS. 그래서 조건이 다르므로 다른 사람이 아니라 다른 사람을 안다면 대답하십시오. 결국 휴대용 "단일"방식이 없다면 여전히 #ifdef와 대답으로 제안 된 코드를 사용할 수 있습니다.

C 언어 (안 C++), 콘솔 응용 프로그램, GCC, 리눅스 및 윈도우 창에 대한

답변

1

자신을 C로 제한하면 불행히도이 작업을 수행하는 데 어려움이있을 수 있습니다. C++로, 부스트 간의 named_mutex이,하지만 C에, 당신이 뜻 중 하나를 열고 어딘가에 flock 파일 :

  • (맥 OS 포함) 유닉스의. 전통적으로 현재 PID를이 파일에 기록합니다. 참고 : NFS에서는 안전하지 않을 수 있습니다. 하지만 어쨌든 귀하의 옵션은 매우 제한되어 있습니다. Linux에서는 로컬이고 안전하게 잠글 수 있도록하려면 /dev/shm 경로를 사용할 수 있습니다.
  • 윈도우 : 오픈과 named mutex
1

는 뮤텍스가 잘 작동합니다.

http://msdn.microsoft.com/en-us/library/ms682411(v=vs.85).aspx

기사는 뮤텍스에 대한 대안을 언급 ....

는 사용자 당 하나 개의 인스턴스에 응용 프로그램을 제한하는 사용자의 프로파일 디렉토리에 잠긴 파일을 만듭니다.

+0

안녕 @Keith을 잠급니다. 그 디렉토리의 전체 경로는 무엇입니까? 작동하는 변수가 있습니까?두 시스템에서이 작업을 시도 할 때 의심의 일부를 설명하기 위해이 질문을 편집했습니다. 시간 내 줘서 고마워! –

0

C는 응용 프로그램이 이미 실행 중인지 확인하기 위해 내장 된 기능을 제공하지 않으므로 크로스 플랫폼을 만들기가 어렵거나 불가능합니다. 그러나 Linux에서는 IPC을 사용할 수 있습니다. 그리고 Windows에서 (나는이 카테고리에 익숙하지 않습니다.) this이 도움이 될 수 있습니다.

+0

Windows의 경우 키스의 대답을 고려하십시오. 나는 그것이 작동하는지 모르겠지만, 당신은 그것을 시도 할 수 있습니다. –

1

Unixland의 정식 방법은 프로세스가 자체 PID를 알려진 위치에있는 파일에 기록하도록하는 것입니다. 이 파일이 존재한다면, 프로그램은 자신의 pid (시스템 호출에 의해 사용 가능한)를 그 파일에있는 것과 함께 점검 할 수 있고, 익숙하지 않다면 다른 프로세스가 실행 중임을 알 수 있습니다.