고갱

[Ubuntu] Received Signals.SIGHUP death signal 본문

오류 해결

[Ubuntu] Received Signals.SIGHUP death signal

주인장 고갱 2025. 9. 11. 19:11

이것은 오류는 아니다.

명백히 오류는 아니지만 그렇다고 개발 일지로 작성하기에는 또 에매하기 때문에 그냥 '오류 해결' 로 묶기로 했다.

 

일단 상황은 이렇다.

  1. nohup 명령어를 통해 파인튜닝을 진행하도록 함
  2. 터미널을 종료함
  3. 시간이 조금 지나고나면 파인튜닝이 중단된다.

사실 nohup 을 통해 터미널이 종료되더라도 프로세스가 종료되지 않도록 하는 것이 목표였지만,

희한하게 다른 명령이랑 다르게 터미널이 종료되면 파인튜닝 프로세스들이 일괄적으로 죽게되는 것이였다.

프로세스가 죽는 현상

 

🔎 원인 분석

일단 아래 사진을 보자.

pstree

 

프로세스 전체 구조는 위와 같다.

여기서 2751311 PID 값을 가진 프로세스가 내가 파인튜닝 명령을 실행시킨 것이고,

해당 프로세스가 다시 자식 프로세스들을 생성하는 것을 알 수 있다.

 

하지만 이런 경우에는 nohup 명령어가 자식 프로세스에까지 적용되지 않는다는 점을 주의해야 한다.

2751311 PID 를 가진 부모 프로세스는 죽지 않았지만, 바로 아래에 있는 2751498 PID 를 가진 자식 프로세스는 SIGHUP 시그널을 받고 프로세스가 죽게된다.

즉 파인튜닝이 중단되는 것이다.

 

지금이야 파인튜닝을 하다가 이런 현상이 나타나긴 했지만, 어떤 작업이라도 자식 프로세스를 사용하는 경우라면 동일한 현상이 나타날 수 있음을 유의해야 한다.

 

 

 

💡 해결 방법

사실 처음 죽었을 때는 nohup 명령어에 출력 경로를 /dev/null 로 지정해서 로그가 남지 않아서 원인을 알 수 없었는데,

다음 번에 죽었을 때는 로그 파일이 남아있던 만큼 원인을 파악하기 어렵지 않았고, 그만큼 쉬운 문제임을 알 수 있었다.

 

사실 방법은 몇 가지가 더 있겠지만 그냥 간단하게 해결한 방법은 disown 명령어를 통해 process를 작업 목록에서 제거하도록 하는 것이였다.

이렇게 해주면 부모 프로세스가 작업 목록에서 사라지기 때문에 자식 프로세스에도 SIGHUP 시그널이 전송될 일이 없어지기 때문에 터미널을 닫더라도 작업이 중단되지 않을 것이다.

 

결론적으로 파인튜닝이 잘 되는 모습

 

그그하여 사진의 초록색 글자가 현재 시간, 파란색이 예상 완료 소요 시간인데,

25시간 42분 째 종료되지 않고 잘 되는 모습을 볼 수 있다.

 

 

🗣 여담

disown 명령어와 관련된 문서를 첨부하고자 했으나 찾지 못하였다.

그리고 생각보다 되게 간단한 문제라서 더 자세히 쓸 필요도 없지 않을까 싶다.