Linux Semaphore 확인 및 삭제

최대 1 분 소요

Semaphore?

프로세스 간 메시지를 전송하거나, 공유메모리를 통해 특정 데이터를 공유하게 되는 경우 문제가 발생할 수 있다.
즉, 공유된 자원에 여러 개의 프로세스가 동시에 접근하면서 문제가 발생하는 것이다.
공유된 자원 속 하나의 데이터는 한 번에 하나의 프로세스만 접근할 수 있도록 제한해 두어야 하는데,
이를 위하여 고안된 것이 바로 Semaphore 세마포어이다.


Delete Semaphore

아파치 동작 환경에서 각 프로세스간 데이터 공유 및 동기화를 위해서 Semaphore를 생성한다.
문제는 아파치가 정상적인 종료가 아닌 강제종료 되는 경우 생성된 Semaphore가 삭제되지 못하고 누적이 된다.
때문에 서버에 한계까지 생성된 Semaphore에 의해 아파치 시작 시 Semaphore를 생성불가로 정상적인 아파치 실행이 되지 않을 수있다.

  • 아래 내용을 vi 편집기로 열어 붙여넣은 후, 실행
#/bin/bash
  
SEM_LIST1=`ipcs -m | grep root | awk '{print $2}'`
SEM_LIST2=`ipcs -s | grep root | awk '{print $2}'`

#공유 메모리 자원 삭제
for i in $SEM_LIST1
do
  ipcrm -m $list
done

#세마포어 삭제
for j in $SEM_LIST2
do
  ipcrm -s $list
done


  • 명령어 참고
    ipcs -a   // 모든 IPC 자원을 조회
    ipcs -q   // 메시지 큐 자원을 조회
    ipcs -m   // 공유메모리 자원을 조회
    ipcs -s    // 세마포어 자원을 조회 
    ipcrm -q  [ID]  // 해당 메시지 큐 자원을 삭제
    ipcrm -m [ID]  // 해당 공유메모리 자원을 삭제
    ipcrm -s  [ID]  // 해당 세마포어 자원을 삭제
    

댓글남기기