극히 개인적이고 극히 대단하지 않은

리눅스 lsof 명령어 사용시 command 가 길어서 곤란할 때 본문

20년차 개발자

리눅스 lsof 명령어 사용시 command 가 길어서 곤란할 때

회색싼타 2019. 3. 20. 15:41

1


리눅스 시스템 명령어 중에 lsof라는 명령이 있다.

시스템을 모니터링하다가 이상 동작이 감지되는 경우, 현상의 원인을 알아내기 위해 사용하는 수십가지 기본 명령어들 중의 하나이며, 각 프로세스가 열고 있는 file descriptor를 파악할 수 있어 유용한 명령이다.


그런데, 여기에 출력되는 command가 기본적으로 9자 까지만 허용되어있다. 이 것이 일반적으로는 별다른 고난을 주지는 않지만, 우리 회사처럼 프로세스 이름의 작명에 철학을 가진 경우에는 문제가 되는 경우가 있다.


우리회사는 개발한 프로세스의 이름을 '회사고유의 접두사'_'프로세스 서비스 분류'_'프로세스 고유명' 으로 정의하고 있다. 그러다보니, 프로세스명의 9자를 훨씬 넘어가는 것은 물론이고, 동일한 접두사와 동일한 분류를 가지는 다수의 프로세스들이 있다보니 lsof가 허용하는 9자로는 구분이 안되는 경우가 있다. 



예를 들어 위의 샘플은 lsof의 결과의 일부분인데, 프로세스 이름은 STEM_CL_C 로 동일하지만, 두번째 컬럼의 PID가 서로 다르다는 사실로부터 프로세스의 이름도 서로 다를 것이라고 추정할 수 있다. (예외적으로 같은 프로세스를 두 번 띄우는 경우는 위와 같을 수 있겠지만, 위의 경우는 프로세스의 이름이 서로 다르지만, 9자리까지는 동일한 경우다.)


이렇게 출력이 되면 접두사, 분류까지 동일한 수많은 프로세스들을 서로 구분하기가 쉽지않다. 동일한 작업이 반복되어야 하는 경우라면 쉽지않은 정도가 아니라 업무의 효율성까지도 뚝뚝 떨어지게 된다.


'프로세스 이름을 더 길게 출력하는 방법이 없을까?' 하는 고민으로 여러 포스팅을 찾고 구글검색도 해 봤지만, 쉽게 찾아지질 않는다. '예전에도 같은 문제로 같은 짓을 했던 것 같다.' 라는 생각이 들어 힘겹게 찾은 방법을 첫 포스팅으로 남긴다.


이 방법도 분명 한계가 있는 방법이지만, 한두 글자의 차이로 식별이 가능한 경우에는 매우 유용하기 때문에 알아 둘 필요는 있는 듯하다.


lsof +c n


위의 샘플처럼 lsof 명령어 다음에 프로세스 이름(코멘드)의 길이를 n으로 지정하는 옵션을 추가해 주면 된다. 다른 옵션들과 당연히 혼용은 가능하고 다른 옵션에 대해서는 여기서 따로 언급하지 않는다. (man page 참고)


제한점은 n 값이 충분히 여유가 있는 게 아니라 15까지만 가능하다는 것이다.


아래는 동일한 장비에서 lsof +c 15 를 수행한 결과이다.





2


또다른 방법으로는 검색하고자 하는 프로세스 이름을 정확하게 넣어주는 방법이 있다. 이 방법은 


lsof | grep 프로세스이름


을 수행했을 때, 프로세스이름의 길이로 인하여 원하던 결과를 반환받지 못한 경우에 유효하다.


lsof -c 프로세스이름


을 입력하면 출력은 lsof의 경우와 동일한 포맷으로 출력이되나 정확히 프로세스이름과 일치되는 프로세스에 대해서만 출력된다.




1번의 방법과 2번의 방법은 혼용이 가능하다.



출처 : http://www.geekpills.com/operating-system/linux/the-ultimate-lsof-list-open-files



시험장비 : CentOS 6.9


Comments