반응형
리눅스나 파이썬 환경에서 작업을 하다 보면 간혹 이런 오류를 마주하게 됩니다:
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 추가하거나 재시도 로직 사용 |
반응형