[linux] 유닉스 / 리눅스 시스템에서 실행중인 프로세스로 커맨드 라인 인수를 얻는 방법?

SunOS에는 pargs실행중인 프로세스에 전달 된 명령 행 인수를 인쇄하는 명령이 있습니다.

다른 유닉스 환경에서도 비슷한 명령이 있습니까?



답변

몇 가지 옵션이 있습니다.

ps -fp <pid>
cat /proc/<pid>/cmdline | sed -e "s/\x00/ /g"; echo

/proc/<pid>리눅스 에는 더 많은 정보가 있습니다 .

다른 유닉스에서는 상황이 다를 수 있습니다. 이 ps명령은 모든 곳에서 작동하며, /proc운영 체제에 따라 다릅니다. AIX에 예를 들어 전혀 없다 cmdline에서 /proc.


답변

이것은 트릭을 할 것입니다 :

xargs -0 < /proc/<pid>/cmdline

xargs가 없으면 인수 사이에 공백이 없습니다. 인수가 NUL로 변환 되었기 때문입니다.


답변

전체 명령 줄

Linux & Unix System의 ps -ef | grep process_name경우 전체 명령 행을 얻는 데 사용할 수 있습니다 .

SunOS 시스템에서 전체 명령 행을 얻으려면 다음을 사용할 수 있습니다.

/usr/ucb/ps -auxww | grep -i process_name

전체 명령 행을 얻으려면 수퍼 유저가되어야합니다.

인수 목록

pargs -a PROCESS_ID

프로세스에 전달 된 인수의 자세한 목록을 제공합니다. 다음과 같이 인수 배열을 출력합니다.

argv[o]: first argument
argv[1]: second..
argv[*]: and so on..

Linux에서 비슷한 명령을 찾지 못했지만 다음 명령을 사용하여 비슷한 출력을 얻습니다.

tr '\0' '\n' < /proc/<pid>/environ


답변

리눅스

cat /proc/<pid>/cmdline

프로세스의 명령 줄 (args 포함)이지만 모든 공백이 NUL 문자로 변경되었습니다.


답변

(전체 명령 행) 및 (자세한 설명) 과 pgrep함께 사용할 수 있습니다 .-f-l

pgrep -l -f PatternOfProcess

이 방법은 다른 응답과 결정적인 차이가 있습니다. CygWin 에서 작동 하므로 Windows에서 실행되는 모든 프로세스의 전체 명령 줄을 얻는 데 사용할 수 있습니다 ( 상승 / 관리 프로세스에 대한 데이터를 원하는 경우 상승으로 실행 ) . Windows 에서이 작업을 수행하는 다른 방법은 더 어색합니다 ( 🙂 .
또한 내 테스트에서 pgrep 방식은 CygWin의 python 내에서 실행되는 스크립트 의 전체 경로를 얻는 유일한 시스템 이었습니다 .


답변

/proc/PID/cmdlineLinux에서 공백 으로 인쇄 하는 또 다른 변형은 다음 과 같습니다.

cat -v /proc/PID/cmdline | sed 's/\^@/\ /g' && echo

이런 식으로 NULL 문자를 그대로 cat인쇄 한 다음 ;를 사용하여 공백으로 대체합니다 . 줄 바꿈을 인쇄합니다.^@sedecho


답변

간단하게 사용할 수 있습니다 :

ps -o args= -f -p ProcessPid