리눅스 백그라운드 실행(터미널종료에도)
리눅스 백그라운드 실행 (터미널종료에도)
터미널종료해도 백그라운드 실행유지. 요약.
- 방법1 (nohup)
$ nohup [커맨드] &
- 방법2 (disown)
$ 커맨드 &
$ disown
- 방법3 (screen)
$ screen -S [작업명] ; 작업명은 임의의 스트링...
$ [커맨드]
^A, d ; (컨트롤+A 누르고 d키를 누름) detach되면서 백그라운드로 돌아감.
- 로그아웃했다가 다시 로그인하여 프로세스 확인
ps -ef | grep [검색어] ; 프로세스가 잘 떠 있는지 확인
screen 백그라운드 실행
스크린 - 윈도우 개념.
스크린들을 여러 개 만들수 있고, 스크린 내부에 윈도우를 여러 개 만들 수 있다. (처음 스크린을 만들면 0번 윈도우가 자동으로 만들어짐)
스크린 만들기
screen -S [세션명]
ex)
screen -S edit
screen -S build
스크린 목록
screen -ls
여기에 Attached라고 되어 있는 것이 현재 screen.
전부 detached라고 나오면 스크린 상태가 아님.
스크린 나오기
^+A, d ; detach. 작업중인 것은 백그라운드로 계속 돌아간다.
스크린 재접속
screen -r [세션명]
스크린 내에서 윈도우 만들기
- ^+A 누른 후에 C (create) 를 누름.
윈도우 종료는 exit
윈도우 목록. 몇 번 까지 있는지 하단에 나옴.
^+A, W ; window
윈도우 이동
^+A, a ; 바로 전
^+A, 0 ; 0번창
^+A, 1 ; 1번창.
screen 상태에서 화면 스크롤
스크린 상태에서는 쉬프트+PageUp (스크롤)이 먹히지 않는다. 화면이 깜빡이고 만다.
^+A, ESC ; vi모드로 이동 및 페이지 업 , 다운에 vi커맨드로 하면 된다. ^B, ^F
ESC를 누르면 스크롤 모드 해제.
nohup
nohup [커맨드] &
터미널 종료 후에도 계속 작업이 유지됨
&, bg, fg
백그라운드 실행을 하면, 쉘은 그대로 쓸 수 있는데, 백그라운드에서 터미널로 출력되는 메시지도 화면에 출력된다.
-
백그라운드 실행
./a.sh &
그러나 터미널 종료시 종료됨… (종료 방지를 하려면 screen이나 nohup을 사용) -
현재 실행중인 프로그램을 백그라운드로.…
^+Z ; 일시 중단하고 shell로 빠져나옴.
jobs ; 백그라운드 조회. 번호와 커맨드가 나옴.
bg %1 ; %잡번호를 입력하여 백그라운드로 재개시킴.
기타
fg %1 ; 포그라운드로 재개됨.
kill %1 ; 잡1번 강제종료.
disown
그러나, 위 백그라운드는 터미널이 종료되면 프로세스도 종료된다.
이것을 방지하려면,
disown
disown을 하게 되면 현재 세션 job list에서 job 들이 빠져나가게 된다. (jobs 커맨드로 확인 가능. 프로세스 전체 보기로 보면 프로세스는 남아있음.)
따라서 터미널이 종료되어도 SIGHUP이 전달되지 않아서 계속 돌아가게 된다.
Author: crazyj7@gmail.com