카테고리 없음

❗ OSError: [Errno 3] No such process 오류 원인과 해결 방법 (Linux & Python)

idea9329 2025. 4. 3. 10:53
반응형

리눅스나 파이썬 환경에서 작업을 하다 보면 간혹 이런 오류를 마주하게 됩니다:

OSError: [Errno 3] No such process

이 오류는 단순히 “프로세스가 없다”는 뜻처럼 보이지만, 실제로는 시스템 자원 접근, 프로세스 관리, 권한 문제 등 다양한 원인이 있습니다.
이 글에서는 이 오류가 발생하는 이유와, 실제 사용하는 명령어 또는 코드 상황에 따른 해결 방법을 자세히 알려드립니다.


📌 OSError: [Errno 3] No such process란?

이 오류는 리눅스나 Python에서 특정 프로세스를 참조하거나 조작하려고 했는데, 해당 프로세스가 존재하지 않을 때 발생합니다.

에러 메시지 의미:

항목설명

OSError 시스템 수준의 에러
Errno 3 표준 에러 번호 3 → No such process (ESRCH)
No such process 프로세스 ID(PID) 또는 명령어가 존재하지 않음

🧠 어떤 상황에서 발생할 수 있나요?

1. nice, os.nice() 관련 우선순위 설정 시

리눅스에서 프로세스 우선순위를 조정할 때 사용하는 nice 명령 또는 Python의 os.nice() 함수가
이미 종료된 프로세스 또는 권한이 부족한 상태에서 실행되면 이 에러가 발생할 수 있습니다.

import os
os.nice(10)  # 여기서 예외 발생 가능

2. psutil, subprocess, kill, waitpid 같은 프로세스 관련 코드 사용 시

  • 이미 종료된 PID에 접근하려고 시도
  • 존재하지 않는 PID를 대상으로 os.kill(pid, 0) 호출
  • waitpid() 사용 시 자식 프로세스가 없거나 이미 끝남

3. 백그라운드 프로세스가 짧게 실행되고 사라질 때

크론(cron)이나 systemd 타이머로 실행된 스크립트에서
너무 짧게 실행되는 명령어를 대상으로 상태 확인을 하려다 발생하기도 합니다.


✅ 해결 방법

✔️ 1. 예외 처리 추가 (Python 코드에서)

import os
try:
    os.nice(10)
except OSError as e:
    if e.errno == 3:
        print("❌ 프로세스를 찾을 수 없습니다.")
    else:
        raise

✔️ 2. ssh, cron, subprocess 등에서 명령어 제대로 전달되었는지 확인

  • 명령어 오타 없음?
  • 프로세스가 너무 빨리 종료되지 않았는가?
  • cron에서는 $PATH 설정 문제로 실행이 안 될 수도 있음

✔️ 3. ps나 pgrep 사용해서 존재 여부 확인 후 작업

PID=$(pgrep -f "python my_app.py")
if [ -n "$PID" ]; then
  kill -9 $PID
else
  echo "❌ 대상 프로세스가 존재하지 않습니다."
fi

✔️ 4. nice 명령어는 root 권한 필요할 수도 있음

  • 일반 사용자는 우선순위를 낮추는 것만 가능
  • 우선순위를 높이려면 sudo가 필요
sudo nice -n -5 ./my_script.sh

✅ 요약 정리

원인설명해결 방법

프로세스 종료 접근하려는 PID가 이미 종료됨 ps로 사전 확인 후 처리
권한 부족 nice 등은 root 권한 필요 sudo 사용 또는 우선순위 조정 제한
경로 문제 cron, ssh 등에서 전체 경로 누락 명령어 전체 경로로 작성
빠른 종료 짧은 실행 시간 때문에 PID 잡지 못함 sleep 추가하거나 재시도 로직 사용



반응형