리눅스 공유메모리 삭제 초기화 방법

공유메모리 정의

Shared memory는 컴퓨터 환경에서 여러 프로그램이 동시에 접근할 수 있는 메모리다. 과다한 복사를 피하거나 해당 프로그램 간 통신을 위해 고안되었으며, 환경에 따라 프로그램은 하나의 프로세서에서나 여러 개의 프로세서에서 실행할 수 있다. (예를 들어 여러 개의 스레드 간에)

하나의 프로그램 안에서 통신을 위해 메모리를 사용하는 일은 일반적으로 공유 메모리로 이야기 하지 않는다.

종종 리눅스에서 ipc 를 생성하려고 하는데, 갑자기 프로그램이 죽어버리는 경유가 생길수 있다. 이런 경우에는 기존의 생성된 ipc 자원이 정상적으로 삭제가 되지 않아 발생된 문제라고 보는 것이 맞다.

그래서 ipcs 라는 명령어를 이용해서 공유메모리를 확인하거나 삭제할수 있으며, 이러한 과정을 거치지 않으면 프로그램 실행에 문제가 발생할수 있다는점 명심해야 된다.

또한 메시지 큐라는 것이 있는데, 리눅스에서는 보통 초기값이 16 으로 되어있다. 이 또한 메시지 큐 사용자가 정상적으로 삭제를 하지 않고, 프로그램 종료를 할 경우 다른프로그램이 실행시 영향을 줄수 있기 때문에 초기값 변경이 필요하다.

echo 32 > /proc/sys/kernel/msgmni

위와 같은 명령어를 이용해서 초기값 수정을 한다.

ipcs 명령어 이용해서 공유메모리 삭제

아래 명령어는 주로 사용되는 ipcs 명령어이다. 참고하길 바란다.

ipcrm -m shmid  : id가 shmid를 가진 shared memory 자원 삭제
ipcrm -q  msgid : id가 msgid인 message queue 자원 삭제
ipcrm -s semid : id가 semid인 semaphore 자원 삭제

위와 같은 명령어를 사용해도 되며, 아래와 같이 for문을 사용해서 일괄적으로 특정 프로세스를 모두 삭제 하는 방법도 있다.

for i in `ipcs -s|grep nobody |awk '{print $2}'`;do ipcrm -s $i;done;

nobody 라는 프로세스를 조회해서 공유메모리 삭제를 하는 명령어이다. 프로세스 확인 방법은 여러가지가 있는데, 아래 명령어를 참조하길 바란다.

ps
ps -ef
pstree

위 for문으로 작성된 것은 한줄로 공유메모리를 정리할수 있습니다. 간단한 쉘 스크립트 언어를 접목시킨 결과다.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 항목은 *(으)로 표시합니다