[ 리눅스 프로그램 실행 방식 ]
* 포그라운드 프로세스 (Foreground Process)
- 기본적으로 터미널에서 실행되는 명령어는 포그라운드 프로세스로 실행.
- 사용자와 상호작용하며, 실행이 완료될 때까지 터미널 대기.
- 터미널 종료, 사용자 세션 종료 ==> 프로세스 종료.
./script.sh
bash script.sh
python3 myscript.py
* 백그라운드 프로세스 (Background Process)
- 실행 이후에도 터미널을 차단하지 않고 계속 실행. (PID출력 후 바로 프롬프트 반환)
- 사용자와 상호작용 없이 동작.
- 터미널 종료, 사용자 세션 종료에도 계속 실행하기 위해서는 명령어 필요.
==> nohup, setsid, screen, tmux 등
./script.sh & # & 사용 (기본적인 백그라운드 실행)
nohup ./script.sh & # 터미널 종료 후에도 유지됨
setsid ./script.sh # 독립적인 세션에서 실행
터미널 종료 이후에도 프로세스 실행을 유지하려면 'nuhup' , '&' 를 함께 사용
nohup ./script.sh &
* nohup
- 'no hang up' 의 약자로 SIGHUP신호를 무시하여 터미널을 종료해도 프로세스가 종료되지 않음.
- nohup 단독사용 시 포그라운드로 실행.
=> 터미널을 닫아도 프로세스는 계속 실행되지만 사용자가 해당 터미널에서 다른 작업 할 수 없음. - nohup.out 파일에 표준출력(stdout), 표준에러(stderr) 저장.
로그파일 저장
nohup ./script.sh > mylog.log 2>&1 &
> mylog.log : 표준 출력(stdout)을 mylog.log에 저장.
2>&1 : 표준 에러(stderr)도 같은 파일(mylog.log)에 저장.
로그파일 분리 저장
nohup ./script.sh > stdout.log 2> stderr.log &
표준 출력(stdout) → stdout.log에 저장.
표준 에러(stderr) → stderr.log에 저장.
표준출력만 저장
nohup ./script.sh > /dev/null 2> error.log &
표준 출력(stdout) → /dev/null (출력 안 함)
표준 에러(stderr) → error.log
저장X
nohup ./script.sh > /dev/null 2>&1 &
모든 출력(stdout & stderr) 무시 (로그 남기지 않음).
'기타' 카테고리의 다른 글
[웹서버] NestJS란 ? (0) | 2025.02.13 |
---|---|
[LINUX/JAVA] 자바 버전 관리 도구 (alternatives) (0) | 2025.02.11 |
[Docker] 도커 컨테이너, Dockerfile, Volume, 도커 네트워크 (0) | 2025.02.10 |
[API / Python] Geolocation API_현재 위치좌표 추출 (0) | 2025.02.09 |
[Linux] 표준 출력(stdout) & 표준 에러(stderr) 읽어오기 (0) | 2025.01.27 |