새소식

자격증/리눅스마스터

[LINUX] 리눅스 마스터 2급 기출 :: nohup, &(백그라운드) 명령어

  • -

nohup

터미널의 세션 로그아웃시 리눅스는 해당 터미널에서 실행한 프로세스들에게 HUP Signal을 전달한다

이때 HUP(Hang UP) Signal을 무시하도록 하는 명령어라 nohup이라 붙여졌다고 합니다. 쉽게 말하면 세션 끊지마!라고 합니다

  • 리눅스, 유닉스에서 sh을 데몬형태로 실행시키는 프로그램
  • 터미널 세션이 끊겨도 실행을 멈추지 않고 동작(백그라운드에서 실행)
  • 실행할 .sh파일은 퍼미션이 755(rwxr-xr-x) 이상이어야 함
  • $ nohup shell.sh & => 세션 종료에 상관없이 백그라운드에서 shell.sh 실행
  • nohup으로 쉘파일을 실행하면 자동으로 nohup.out파일 생성(이전 결과나 에러들이 계속 쌓여서 저장됨) => 프로세스 상태 확인 가능

 

표준출력 파일 이름 변경

$ nohup ./shell.sh > nohup_shell.out

기본적으로 생성되는 표준출력 파일 이름은 nohup.out이지만 리다이렉션을 이용해 원하는 이름으로 저장할 수 있습니다

 

리다이렉션(redirection) 이용하여 nohup.out 파일 생성 X

$ nohup ./shell.sh 1>/dev/null 2>&1 &
$ nohup ./shell.sh > /dev/null

앞의 1은 표준출력을 의미하며 /dev/null에다가 쓰라는(>) 의미로 표준 출력을 생성하지 말라는 의미입니다

2>&1는 2는 표준에러인데 이를 표준출력이 쓰여지는 파일에 같이 쓰겠다는 뜻으로 즉 표준에러도 쓰지 않겠다가 됩니다

*참고: 표준 입력:0, 표준 출력:1, 표준 에러:2

 

백그라운드(&) 명령어

  • &: 프로세스가 백그라운드에서 동작가능하게 함
  • 백그라운드로 돌더라도 nohup과 동일하게 세션이 끊어져도 프로그램이 종료되지 않는 옵션이 디폴트로 적용 되었다고 함. 그러나 셸마다 다를 수 있기 때문에 nohup + &로 외워 프로그램을 세션 종료에 관계 없이 백그라운드에서 실행시키는게 좋음

 

프로세스 종료

nohup + &로 백그라운드에 실행을 시켰는데 해당 프로세스를 종료하고 싶다면 어떻게 해야할까요??

실제 현업에서도 많이 쓰이는 명령어를 이용하여 PID를 알아내고 kill 명령어를 통해 죽이면 됩니다

$ ps -ef | grep shell.sh
$ kill -9 [PID]

 

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.