CS/운영체제(리눅스)

nohup 과 &, 리눅스 백그라운드 실행

prden 2023. 8. 20. 14:10

1. nohup, &이란

리눅스를 사용할 때 백그라운드에서 세션과의 연결이 끊어져도 프로세스를 돌려야 하는 경우 사용하는 명령어가 nohup과 & 명령어이다.  putty나 cmd를 통한 ssh로 서버와 연결했을 때 세션을 끊어도 해당 프로세스를 백그라운드에서 돌릴 수 있다는 말이다.

* nohup = no hang up = 끊지 말라는 것

nohup yarn start

nohup을 이렇게 실행시키면 nohup: appending output to `nohup.out` 메세지와 함께 nohup을 실행시킨 경로에 nohup.out 파일이 생성된다.

다른 파일에 출력하려면 아래와 같이 

// 다른 파일에 출력을 할 경우
nohup yarn start > nohup_script.out
// 출력 내용이 필요하지 않을 경우
nohup yarn start > /dev/null

&를 맨 마지막에 붙여주면 백그라운드에서 실행시켜준다. 

엄밀히 말하면 nohup은 프로그램을 데몬의 형태로 실행시키는 것이라 로그아웃으로 세션이 종료되어도 프로그램이 종료되지 않고, &(백그라운드 실행, 화면에만 출력되지 않는 것)은 프로그램을 cmd 창에서 사용자 눈에 보이지 않게 백그라운드 형태로 돌리고 있는 것이기 때문에 로그아웃으로 세션이 끊어지면 해당 프로그램도 함께 종료된다. 

&를 사용하지 않고 nohup만 사용했을 때 cmd에서 대기상태가 발생하고(화면이 멈춘 것 같은 상태) 이때 Ctrl +C를 누르면 프로세스는 종료된다.

따라서 nohup과 &를 같이 쓰는 게 안전하다.

nohup yarn start &

1-1. &의 원래 용도

로그인한 세션에서 입력을 계속 사용해야 할 때 실행프로그램의 출력 때문에 쉘을 사용할 수 없을 때 사용하게 된다.

2. ps -ef 리눅스 프로세스 확인 명령어

nohup 프로세스를 종료하기 위해서는

ps -ef 로 프로세스 찾아서

ps -ef | grep <ddddd>

kill 로 죽여야 한다.

 

※ ps 명령어 

ps -ef

f 옵션은 프로세스의 상태 정보를 모두(full) 표시하겠다는 옵션

프로세스를 실행한 UID, PID 그리고 부모 프로세스의 ID(PPID)가 표시되며, 프로세스를 실행할 당시의 커맨드라인도 표시가 된다.

 

https://gracefulprograming.tistory.com/126

 

[Linux] ps 로 실행 중인 프로세스 확인하기

개요 ps 명령어는 리눅스에서 현재 실행중인 프로세스를 확인하는 명령어 입니다. Process Status에서 따온 이름이죠. 이름 그대로 명령어를 실행하면 현재 실행되고 있는 프로세스들의 정보를 화면

gracefulprograming.tistory.com

※ kill 명령어

kill은 원래 프로세스를 강제로 종료시키는 명령어가 아니고, 프로세스에 시그널을 보내는 명령어이다.

모든 프로그램을 설계할 때 대부분의 경우 종료 시그널을 받았을 때 처리하고 있던 데이터가 안전하게 정리될 수 있도록 설계한다. 따라서 SIGKILL 시그널을 보내 강제로 종료시키는 방법은 권장되지 않는다.

강제종료는 아래 두 명령어

kill -KILL PID
 or
kill -9 PID

아무런 시그널을 지정하지 않으면 SIGTERM이 전달된다. 

 

특정 이름의 프로세스를 모두 종료할 때는 

kill `ps -ef | grep 프로세스이름 | grep -v grep | awk '{print $2}'`

1) `명령어` 백틱(backticks)은 치환명령어로 ``로 감싼부분이 실행결과로 치환된다.
2) grep -v는 지정된 패턴과 일치하는 항목을 제외할 때 사용한다. - > "grep 프로세스이름"도 하나의 명령어이기 때문에
"ps -ef |grep 프로세스 이름"의 결과에 포함되는데 kill 명령어에서 이를 제외시키는 것
3) awk명령어는 입력값(record)을 공백문자로 분리하여 필드 단위로 처리할 수 있게 해주는 명령어

참고 : https://www.devkuma.com/docs/linux/nohup/

 

Linux 명령어 | 프로세스 관리 | nohup 세션이 끊겨도 계속 실행

nohup 명령어 nohup 명령어는 로그아웃 등과 같이 터미널과의 세션 연결이 끊기더라도 프로세스가 계속 동작되도록 해준다. 일반적으로 터미널과의 세션 연결이 끊기게 되면 리눅스에서는 해당 세

www.devkuma.com

https://gracefulprograming.tistory.com/127

 

[Linux] kill 프로세스를 '안전하게' 종료시켜보자

개요 kill 명령어는 이름 때문에 프로세스를 강제로 종료시키는 명령어로 오해를 사기 쉬운데 실제로는 프로세스에 시그널(signal)을 보내는 명령어입니다. 이름이 kill 인 이유는 어떤 시그널을 보

gracefulprograming.tistory.com

 

'CS > 운영체제(리눅스)' 카테고리의 다른 글

ufw, iptables 차이  (0) 2023.05.19
런 레벨(Run Level)  (3) 2023.05.15
리눅스 파일시스템 및 명령어  (0) 2023.01.24
쉘 스크립트(.sh)  (0) 2022.12.27
리눅스 권한 및 사용자 관련  (0) 2022.12.27