Linux에서 실행 중인 프로세스의 전체 시작 명령어 확인 방법

리눅스 환경에서 작업하다 보면 실행 중이거나 종료된 프로세스의 정확한 실행 명령어가 기억나지 않는 경우가 흔합니다. 특히 시스템 관리나 장애 복구 과정에서 해당 프로세스를 재시작해야 할 때 원본 명령어를 찾는 것이 중요해집니다. 다행히도 Linux는 프로세스 생성 시의 명령 인자까지 기록하기 때문에, 이를 적절히 활용하면 원래의 실행 커맨드를 복원할 수 있습니다.

/proc 파일시스템을 이용한 명령어 추출

Linux 커널은 모든 실행 중인 프로세스에 대해 /proc/[PID] 디렉터리 아래에 다양한 정보를 제공합니다. 이 중 cmdline 파일에는 그 프로세스가 시작될 때 사용된 전체 명령줄이 공백 대신 null 문자(\0)로 구분되어 저장됩니다.

예를 들어, PID가 30205인 프로세스의 시작 명령어를 확인하려면 다음 단계를 따릅니다.

# 먼저 ps 명령어로 특정 PID를 가진 프로세스를 식별
ps -ef | grep 30205

# 출력 예시:
# root     30205     1 ... /usr/java/jdk1.8.0_201/bin/java -jar -Xmx1024m ...

이후 /proc/30205/cmdline 파일을 읽어 원본 명령어를 확인합니다. 단순히 cat으로 출력하면 인자들이 붙어서 나올 수 있으므로, 가독성을 위해 null 문자를 줄바꿈 또는 공백으로 변환하는 것이 좋습니다.

# cmdline 내용 확인 (가독성이 떨어짐)
cat /proc/30205/cmdline

# 개선된 방식: null 문자를 줄바꿈으로 치환하여 보기 쉽게 출력
tr '\0' ' ' < /proc/30205/cmdline && echo

# 또는 xargs를 사용해 깔끔하게 표시
xargs --null < /proc/30205/cmdline

출력 결과는 다음과 유사하게 나타납니다:

/usr/java/jdk1.8.0_201/bin/java -jar -Xdebug -Xnoagent -Xmx1024m -Xms1024m -XX:NewRatio=1 -XX:SurvivorRatio=8 -Dconfig.path=file:/xtwj/biz/xtwj-mall-goods-biz/;file:/xtwj/biz/common.properties

추가 팁: 다른 관련 파일 활용

  • /proc/[PID]/environ: 프로세스가 사용한 환경 변수 목록을 포함하며, 이것 역시 null로 구분됩니다. 분석 시 tr '\0' '\n' < environ으로 처리 가능합니다.
  • /proc/[PID]/exe: 실행 파일의 심볼릭 링크입니다. 어떤 바이너리로 실행되었는지 빠르게 확인할 수 있습니다.
  • /proc/[PID]/cwd: 프로세스가 시작된 작업 디렉터리를 가리킵니다.

history 명령어의 한계와 보완

일부 사용자는 셸의 history 명령어를 통해 이전에 입력한 명령어를 찾으려 하지만, 이 방법은 다음과 같은 제약이 있습니다:

  • 히스토리 와이프 또는 세션 종료 시 기록 소실
  • 자동 시작 스크립트나 시스템 서비스는 히스토리에 남지 않음
  • 명령어 수정 후 재실행 시 오래된 기록만 존재할 수 있음

따라서 실시간으로 실행 중인 프로세스의 정확한 명령어를 얻기 위해서는 /proc/[PID]/cmdline 접근이 가장 신뢰할 수 있는 방법입니다.

요약

특정 프로세스의 전체 시작 명령어를 정확히 파악해야 할 때는 다음 절차를 권장합니다:

  1. ps -ef 또는 pgrep로 대상 PID 식별
  2. /proc/[PID]/cmdline 파일을 tr 또는 xargs -0로 가독성 있게 출력
  3. 필요 시 environ, cwd 등을 함께 참조하여 실행 컨텍스트 파악

태그: linux procfs cmdline ps command process monitoring

6월 17일 03:54에 게시됨