반응형

함수를 활용해서 쉘스크립트안에서 멀티 스레드와 백그라운드를 구현하는 방법에 대해 알아보도록 하겠습니다. 사실 제가 쉘 스크립트를 사용하면서 다른 언어와 비교했을 때 가장 편하다고 생각했던 부분입니다.

 

리눅스에서는 command 뒤에 '&'를 붙이게 되면 백그라운드로 동작하게 되고 리눅스의 예약어 $!로 해당 PID 값을 갖고 있게 되면 그 프로세스를 제어할 수 있습니다. 일단 샘플 코드와 수행 결과 값을 확인해 보겠습니다.

 

 #!/bin/bash

THREAD()
{
        while [ 1 ]
        do
                echo "THREAD 1 : $1"
                sleep 1
        done
}

 

echo "CALL 1st thread - Background Operating"
THREAD first&
THREAD_1st_PID=$!


echo "THREAD PID : $THREAD_1st_PID"
sleep 5
echo "Wait 5sec -> 1st thread suspend 5sec  "
echo "CALL 2nd thread - Background Operating"
kill -19 $THREAD_1st_PID
THREAD second&
THREAD_2nd_PID=$!

sleep 5


echo "Wait 5sec -> 1st thread continue 5sec  "
kill -18 $THREAD_1st_PID
sleep 5
kill -9 $THREAD_1st_PID $THREAD_2nd_PID

 root@ubuntu:/shell# ./multi.sh
CALL 1st thread - Background Operating
THREAD PID : 13595
THREAD 1 : first
THREAD 1 : first
THREAD 1 : first
THREAD 1 : first
THREAD 1 : first
Wait 5sec -> 1st thread suspend 5sec
CALL 2nd thread - Background Operating
THREAD 1 : second
THREAD 1 : second
THREAD 1 : second
THREAD 1 : second
THREAD 1 : second
Wait 5sec -> 1st thread continue 5sec
THREAD 1 : first
THREAD 1 : second
THREAD 1 : first
THREAD 1 : second
THREAD 1 : first
THREAD 1 : second
THREAD 1 : first
THREAD 1 : second
THREAD 1 : first
THREAD 1 : second

 

파란색으로 및줄친 부분이 백그라운드 및 멀티스레드의 핵심적인 요소 입니다. 해당 구문에 백그라운드로 돌리고 해당 프로세스의 PID값을 저장하고 순차적으로 하나의 스레드를 추가로 생성하고 마지막에는 스레드를 종료하고 마치게 되는 구조 입니다.

반응형

+ Recent posts