2023년 4월 5일 작성
nohup - Background Program 실행시키기
nohup은 program을 background에서 실행시키는 명령어입니다.
nohup : No Hang Up
- program을 daemon의 형태로 실행시킵니다.
- logout으로 session과의 연결이 종료되어도 program이 종료되지 않습니다.
nohup 사용법
nohup [program_command]
- 실행하고자 하는 program 명령어 앞에
nohup를 붙이면 됩니다.
nohup + & : 가장 안전하게 background에서 실행하는 방법
nohup ./my_shellscript.sh &
- program을 종료 없이 background에서 실행시키고 싶다면
nohup과&(background)를 조합해서 쓰는 것이 가장 확실하고 안전합니다.
& (ampersand)
- program 실행 시에 명령어 맨 끝에 붙이면 foreground가 아니라 background로 실행됩니다.
./my_shellscript.sh &
- logout으로 session과 연결이 끊어지면,
&로 실행되고 있던 program도 함께 종료됩니다.- program을 단지 사용자 눈에 보이지 않는 background 형태로 돌리고 있는 것이기 때문입니다.
- 예외적으로, 연결이 끊어져도
nohup처럼 program은 계속 실행되는 경우가 있습니다.- 특정 version 이상부터 session이 끊어져도 program이 종료되지 않는 option이 default로 바뀌었기 때문입니다.
shopt : &의 Default Option 확인하기
shopt | grep huponexit
shopt: shell option을 조회해 볼 수 있는 명령어입니다.huponexit off라고 나오면&만으로만 program을 실행해도 session 연결 종료 시에 program이 종료되지 않습니다.
Process와 Directory 확인
- Linux 기본 명령어를 사용해
nohup으로 실행한 process가 어느 directory에서 실행되고 있는지 확인할 수 있습니다.
nohup으로 실행한 Process 확인하기
nohup으로 띄운 program을 제어하기 위해선 PID(Process ID)를 알아야 합니다.
ps -ef | grep my_shellscript.sh
ps -ef | grep node
ps -ef | grep java
ps -ef명령어는 system의 모든 process를 상세하게 출력합니다.- 그리고
grep명령어를 pipe 연산자로 연결해서, 특정 program을 찾아냅니다.
nohup으로 실행한 실행 Directory 확인하기
-
nohup으로 실행한 process의 실행 directory를 확인하는 몇 가지 방법이 있습니다. -
가장 간단하고 확실한 방법은
readlink /proc/[PID]/cwd입니다.- 해당 process가 현재 작업하고 있는 directory의 절대 경로를 보여줍니다.
/proc File System 사용 (가장 확실한 방법)
# Process ID를 알고 있는 경우
ls -la /proc/[PID]/cwd
# 또는 실제 경로 확인
readlink /proc/[PID]/cwd
pwdx 명령어 사용
pwdx [PID]
lsof 명령어 사용
lsof -p [PID] | grep cwd
Background Process 종료하는 방법
ps -ef | grep my_shellscript.sh
kill [process_id]
-
ps -ef | grep my_shellscript.sh:ps명령어로process_id를 알아냅니다. -
kill [process_id]:kill명령어로 process를 종료시킵니다.kill -9 [process_id]와 같이-9option을 추가하여 강제 종료시킬 수도 있습니다.- 일반적으로
kill [process_id]로도 종료가 되지만, 종료되지 않는 경우에-9option을 붙여서 강제 종료시킵니다.
- 일반적으로