오늘은 내가 인공지능을 학습시킬 때, 유용했던 명령어를 소개해보고자 한다.
아무래도 인공지능 학습 시 시간이 대부분 오래 걸리기 때문에 서버와의 연결이 끊어지지 않고 몇 시간동안 잘 학습이 되어야 한다. 혹시라도 연결이 끊어진다면 ... 다시 시작해야하는 너무 가슴 아픈 일이 발생하니 이 nohup 명령어를 잘 기억해두자.
nohup 명령어는 no hang up
의 약자이다. 즉, 직역을 해보면 "끊지마!" 라는 뜻이다.
사용자가 세션과의 연결을 끊더라도 지금 실행시키는 프로그램을 종료하지말아달라는 명령어이다.
✅ 사용법
실행하고자 하는 프로그램 명령어 앞에 nohup이라는 명령어만 붙여주면 된다.
>> nohup ./myscript.sh
위의 코드를 실행하면 myscript.sh는 세션이 끊기더라도 프로그램이 종료되지 않으며 "nohup:appending output to 'nohup.out'"
이라는 메세지가 출력된다. 그리고 nohup을 실행시킨 경로에 nohup.out으로 출력들이 저장된다.
📌이때, 주의해야할 점은 nohup으로 실행시킬 파일은 반드시 755 permission을 가지고 있어야 한다.
🔎 nohup의 표준 출력을 다른 파일에 출력하고 싶어!
위와 다르게 내가 원하는 파일에 표준 출력을 하고싶다면 리눅스의 >
명령어를 활용하면 된다.
>> nohup ./myscript.sh > my_output.out
만약, 어떤 출력도 남기고 싶지 않다면 다음과 같은 코드를 실행해주면 된다.
>> nohup ./myscript.sh >/dev/null
🔎 프로그램을 백그라운드로 실행하고 싶어!
&
를 명령어 가장 마지막에 붙여주면 실행시키는 프로그램이 백그라운드로 실행이 된다.
>> nohup ./myscript.sh &
아래 명령어를 사용하면 내가 백그라운드로 실행시킨 프로그램이 백그라운드에서 잘 돌아가고 있는지 확인할 수 있다.
>> ps -ef | grep myscript.sh
nohup
명령어와&
의 차이점은 무엇일까?
nohup
명령어는 데몬의 형태로 실행시키기 때문에 세션과의 연결이 끊어져도 프로그램이 종료되지 않는다.
&
명령어는 사용자의 눈에서 보이지 않게 단순히 백그라운드로 실행시켜주는 명령어이다.
🔎 프로세스 종료를 하고 싶어!
만약, 프로그램을 그만 실행시키고 싶을 때는 ps
명령어를 활용해 프로세스의 아이디를 알아내고, kill
명령어로 프로세스를 종료시키면 그만이다.
# 프로세스 아이디 출력
>> ps - ef | grep myscript.sh
# 프로세스 종료
>> kill -9 [ 프로세스 아이디 ]