터미널 종료 후에도 프로세스 실행 유지
&를 사용하여 백그라운드에서 프로세스를 실행하면 터미널을 닫으면 종료됩니다. 터미널을 닫은 후에도 프로세스를 계속 실행하려면 nohup 명령을 사용할 수 있습니다.
nohup ( "no hang up"의 약자) 는 터미널이 닫힐 때 프로세스에 전송되는 SIGHUP (hang up) 신호를 프로세스가 수신하지 못하도록 합니다.
스크립트를 수정하여 더 오래 실행되도록 해 보겠습니다.
nano ~/project/long_running.sh
내용을 다음과 같이 업데이트합니다.
#!/bin/bash
echo "Starting a very long process..."
sleep 60
echo "Process completed" > ~/project/completed.txt
nano 를 저장하고 종료합니다 (Ctrl+O, Enter, Ctrl+X).
이제 nohup으로 스크립트를 실행해 보겠습니다.
nohup ./long_running.sh &
다음과 유사한 출력을 볼 수 있습니다.
[1] 1234
nohup: ignoring input and appending output to 'nohup.out'
스크립트의 출력은 터미널에 표시되지 않습니다. 대신 nohup.out이라는 파일로 리디렉션됩니다. 이 파일을 확인할 수 있습니다.
cat nohup.out
다음과 같은 내용을 볼 수 있습니다.
Starting a very long process...
이제 터미널을 닫더라도 프로세스는 계속 실행됩니다. 완료되면 nohup.out과 completed.txt에 모두 기록됩니다.
모든 터미널에서 백그라운드로 실행 중인 프로세스를 보려면 ps 명령을 사용합니다.
ps aux | grep long_running.sh
다음과 유사한 내용을 볼 수 있습니다.
labex 1234 0.0 0.0 8160 736 pts/0 S 12:34 0:00 /bin/bash ./long_running.sh
labex 1235 0.0 0.0 14428 1020 pts/0 S+ 12:34 0:00 grep --color=auto long_running.sh
프로세스가 완료될 때까지 기다립니다 (또는 원하는 경우 종료합니다).
## If you want to terminate the process:
kill %1