본문 바로가기
Engineering/OS -Linux, Windows, EXSi

[windows/linux] FD(File Descriptor) 확인하기

by 알탱2 2024. 2. 5.
반응형

그동안 linux 환경에서 실행되는 application 들을 주로 다루었는데, 최근들어 windows 환경에서 실행되는 application 이 신규 개발되고 있다.

linux 환경에서 실행되는 application에서 제품 안정성 시험을 진행할 때, 다양한 지표(memory, cpu, processing time, restart 여부, 등..)를 통해 제품 이상 여부를 확인하고 있는데, 그 중 FD(File Descriptor) Leak이 없는지를 보는 지표도 포함되어 있다.

linux의 경우 FD 수를 체크하고 FD 목록을 확인하는 방법이 command로 쉽게 가능한데, windows 에서는 경험이 없어서 좀 알아보는 중이다. OS 별로 현재 알고 있는 정보는 아래와 같다.

 

 


 

Windows

(1) 설치

아래 url 에서 sysinternal 제품의 zip 파일을 다운로드 하여 압축을 풀고 적절한 경로에 폴더를 복사하여 사용한다.

https://learn.microsoft.com/ko-kr/sysinternals/downloads/sysinternals-suite

 

Sysinternals Suite - Sysinternals

Windows Sysinternals 문제 해결 유틸리티는 단일 도구 모음으로 롤업되었습니다.

learn.microsoft.com

 

(2) 전체 목록 확인하기

C:\Program Files\SysinternalsSuite>handle.exe

(생략...)
------------------------------------------------------------------------------
ctfmon.exe pid: 15504 DESKTOP-ABC\Administrator
   40: File  (RW-)   C:\Windows\System32
  128: File  (R-D)   C:\Program Files\WindowsApps\Microsoft.LanguageExperiencePackko-KR
  330: Section       \Sessions\1\BaseNamedObjects\8534
  4AC: Section       \BaseNamedObjects\__ComCatalogCache__
  4B8: Section       \BaseNamedObjects\__ComCatalogCache__
  5FC: Section       \Sessions\1\BaseNamedObjects\CTF.AsmListCache.FMPDefault1
  684: Section       \Windows\Theme3789119081
  74C: Section       \Sessions\1\Windows\Theme87216714
------------------------------------------------------------------------------

(생략...)

 

 

(3) 특정 app으로 검색하기

C:\Program Files\SysinternalsSuite>handle.exe | findstr /i ctfmon.exe

-> 이 방법은 string 매치로 실행 파일의 PID를 확인하는 방법은 되지만, 상세 FD 목록은 위 (2)번으로 확인하는 방법 외에는 아직 잘 모르겠다..

 

 

 

Linux

 

(1) process pid 확인하기

$ ps ax | grep '{process name}'


# e.g.
$ ps ax | grep storescp
 6141 ?        S      0:32 storescp +xa +uf -xs -od /home/blog/recv --aetitle jinakim 10101 -fe .dcm
22361 pts/2    S+     0:00 grep --color=auto jinakim

-> 위 예시에서 pid = 6141 을 확인

 

 

(2) pid로 fd 목록 조회하기

$ls -al /proc/{pid}/fd

# 예시
$ls -al /proc/6141/fd
합계 0
dr-x------ 2 root root  0 11월 14 21:58 .
dr-xr-xr-x 9 root root  0 11월 14 21:58 ..
lrwx------ 1 root root 64  1월 10 14:38 0 -> /dev/pts/0 (deleted)
lrwx------ 1 root root 64  1월 10 14:38 1 -> /dev/pts/0 (deleted)
lrwx------ 1 root root 64 11월 14 21:58 2 -> /dev/pts/0 (deleted)
lrwx------ 1 root root 64  1월 10 14:38 3 -> socket:[66723]

 

 

(3) FD 수 검색하기

$ ls -al /proc/{pid}/fd | wc -l

# 예시
$ ls -al /proc/6141/fd | wc -l
7

-> pid 6141 의 fd 수는 7-3 = 4개로 볼 수 있다. (3개를 빼는 이유는 위 (2)번 출력에서 3줄을 제외하기 위함)

반응형

댓글