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
※ 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/
https://gracefulprograming.tistory.com/127
'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 |