[shell script] 백그라운드에서 스크립트 실행하기

HYEOB KIM·2022년 4월 27일
0

Shell

목록 보기
56/71

백그라운드 스크립트 실행

백그라운드에서 실행하는 방법은 간단합니다.

스크립트를 실행할 때 뒤에 & 기호만 붙여주면 됩니다.

$ ./test1 &
[1] 585188

대괄호 안의 숫자작업 번호입니다.
뒤의 숫자는 프로세스 ID(PID)입니다.

PID는 프로세스마다 고유값을 가집니다.

프로세스가 완료되면 작업 번호, Done, 실행 명령이 표시됩니다.

[1]+  Done                    ./test1

유의사항

백그라운드로 스크립트를 실행하면 STDOUT, STDERR 파일 디스크립터는 모니터로 여전히 출력됩니다.

모니터로 스크립트의 출력이 이루어지는 와중에 다른 명령어 실행이 가능합니다.

언뜻 보면 편리해보이지만 다른 명령어의 결과값과 함께 겹치게 되면 내용이 뒤섞여 알아보기가 힘듭니다.

$ Line #1
Line #2
Line #3
lsLine #4
'='   csvtosql       output.txt   states   test1   users.csv
'~'   환경_변수.md   result       test     test2   users.sql
$ Line #5
2 - Line #1
2 - Line #2
2 - Line #3
2 - Line #4
2 - Line #5

따라서, 백그라운드로 스크립트를 실행할 경우에는 STDOUT, STDERR리다이렉션 하는 것이 좋습니다.

여러 백그라운드 작업 실행하기

스크립트는 백그라운드로 여러 개를 실행시킬 수 있습니다.

$ ./test1 &
[1] 585486

$ ./test2 &
[2] 585490

$ ./test3 &
[3] 585495

각 스크립트마다 작업 번호와 PID가 부여됩니다.

pts/0의 의미

ps 명령어로 프로세스 리스트를 살펴보면,

$ ps
    PID TTY          TIME CMD
 583315 pts/0    00:00:00 bash
 585531 pts/0    00:00:00 test1
 585533 pts/0    00:00:00 test2
 585538 pts/0    00:00:00 test3
 585542 pts/0    00:00:00 sleep
 585543 pts/0    00:00:00 sleep
 585546 pts/0    00:00:00 sleep
 585547 pts/0    00:00:00 ps

TTY 필드의 값이 pts/0로 나타난 것을 볼 수 있습니다.

이는 각 백그라운드 프로세스가 터미널 세션(pts/0)에 연결되어 있다는 의미인데,

다른 말로 터미널 세션이 종료되면 백그라운드 프로세스 역시 종료된다는 의미입니다.

따라서, 콘솔로부터 로그오프한 후에도 백그라운드에서 스크립트가 계속 실행되게 하려면 다른 작업이 필요합니다.
-> 다음 절에서 살펴봅시다.

profile
Devops Engineer

0개의 댓글