본문 바로가기
IT/LINUX

리눅스 무한루프 빠져나오기

by SidePower 2020. 9. 4.

로드러너로 부하테스트 하면 좋겠지만
큰 프로젝트가 아니면 비싸서 구매할수가 없어요.

 


말하기도 부끄럽지만 셀프 로드러너를 하나 만들었어요.ㅋ

로드러너의 많은 기능중에 부하발생 기능 하나만 필요했습니다.

핵심인 어댑터 기능을 하는 서버를 개발하고
이 서버가 몇 TPS까지 지연되지 않고 처리할수 있는가를
확인하기 위한 성능테스트를 위함입니다.

먼저 어댑터를 호출하는 테스트용 클라이언트 서버 (이하 tstSV)를 만듭니다.
쉘 환경에서 무한루프를 돌려서 tstSV를 실행시킬거에요.

쉘환경에서 무한루프 실행방법 4가지 적었습니다.
참고하세요.

무한루프 실행방법1
while :
do
   tstSV
done

무한루프 실행방법2
while true
do
   tstSV
done

무한루프 실행방법3
while [ 1 ]
do
   tstSV
done

 

무한루프 실행방법4
for (( ; ; ))
do
   tstSV
done

리눅스 쉘 환경에서 쉘스크립트나 명령어 또 프로그램을
실행시킬때 포그라운드 방식과 백그라운드 방식이 있습니다.
포그라운드는 실행시키고 프로그램이 끝날때까지 커서가 멈춰 있고
백드라운드는 실행시키고 바로 커서가 풀려 또 다른 작업을 할수 있습니다.

셀프 로드러너로 많은 TPS를 발생시키기 위해 무한루프를 백그라운드 실행시켜서
원하는 TPS가 발생할때까지 무한루프를 실행할려고 했습니다.

아래와 같은 실수로 해버린거에요 ^^;;

잘 되는지 테스트 해보고 싶은 마음에 셀프 로드러너를 돌리지 않고
쉘 환경에서 명령어 while문으로 무한루프를 그냥 실행시킨거에요.^^;;

tstSV 가 프로세스로 계속 생기고 kill 명령어로 죽어도 생기고...
아차... 빨리 멈추지 않으면 서버가 다운될거 같았어요.

포그라운드면 Ctrl + C 로 빠져나오면 그만인데
백그라운드라 while 명령어를 어떻게 하면
멈출수 있을지 멍해지더라구요. ^^;;

그순간 이런 생각이 드는거에요.
리눅스에 프로세스가 생기면 프로세스를 실행시키는
부모 프로세스가 반드시 있습니다.

 


오~~ 무한루프 명령어를 실행하는 쉘 (터미널) 자체가 바로 부모 프로세스였습니다.

쉘(shell)도 프로그램입니다.

 

ps -ef | grep tstSV
sidepow+ 123 99 ...... tstSV
sidepow+ 124 99 ...... tstSV
sidepow+ 125 99 ...... tstSV

.

.
순서대로 USER PID PPID ..... 실행명령어 인데요.

USER : 프로세스를 실행한 user

PID : 프로세스 ID

PPID 가 바로 부모 프로세스의 ID입니다. 
PPID 가 99로 동일하조.

실행명령어는 tstSV 고요.

ps -ef | grep 99
sidepow+ 99 98 ...... bash

kill -9 99 하니깐 tstSV 프로세스가 다 사라졌어요.
그리고 다시 tstSV 으로 신규 프로세스가 생기지 않았습니다.

 

간단하게 샘플을 만들어 보여드리겠습니다.

먼저 무한루프를 만들고 

부모 프로세스를 찾아봤습니다.

확인되기 쉽게 할려고 무한루프안에 sleep 10초 넣었어요.

아래 바로 sleep 10이 보이시조. 녹색 화살표 밑에요. 

빨간색줄이 무한루프의 부모 프로세스ID (PPID 3640) 입니다. 

 

파란색줄 3640이 PID로 지정되어 있고 프로세스명으로 bash 로 표기(녹색 화살표) 되어 있습니다.

kill -9 3640 명령어로 bash을 죽이면 무한루프 없어집니다. ㅋ

쉘이란

리눅스 커널과 리눅스에 접속한 사용자간에 명령어를 주고 받는 역할을 하는

사용자 인터페이스라고 정의되어 있는데요.

 

쉽게 사용자가 입력한 명령어나 프로그램을 커널에 전달하는 중간 매개체로 보시면 됩니다.

쉘도 종류가 많아요. ksh , csh , bash , sh 등..

저는 bash 쉘을 사용합니다. 그래서 녹색 화살표에 bash로 되어 있습니다.

나중에 쉘에 대해서도 정리할게요.^^


휴~~ 무한루프 조심하세요. 저 같은 바보짓하지 마세요. ㅋ



반응형

댓글