백그라운드에서 실행하는 방법은 간단합니다.
스크립트를 실행할 때 뒤에 &
기호만 붙여주면 됩니다.
$ ./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가 부여됩니다.
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
)에 연결되어 있다는 의미인데,
다른 말로 터미널 세션이 종료
되면 백그라운드 프로세스 역시 종료
된다는 의미입니다.
따라서, 콘솔로부터 로그오프한 후에도 백그라운드에서 스크립트가 계속 실행되게 하려면 다른 작업이 필요합니다.
-> 다음 절에서 살펴봅시다.