UNIX/LINUX 시스템의 실행 프로세스로 명령 행 ARG가 전달되는 방법은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/821837

문제

Sunos에는 있습니다 pargs 명령 줄 인수를 실행중인 프로세스로 전달한 명령.

다른 UNIX 환경에 유사한 명령이 있습니까?

도움이 되었습니까?

해결책

몇 가지 옵션이 있습니다.

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

더 많은 정보가 있습니다 /proc/<pid> Linux에서는 그냥 살펴보십시오.

다른 유닉스에서는 상황이 다를 수 있습니다. 그만큼 ps 명령은 어디에서나 작동합니다 /proc 물건은 OS입니다. 예를 들어 AIX에는 아니오가 있습니다 cmdline 안에 /proc.

다른 팁

이것은 트릭을 수행 할 것입니다.

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

Xargs가 없으면 논쟁 사이에 공간이 없을 것입니다.

전체 명령 라인

Linux & Unix 시스템의 경우 사용할 수 있습니다 ps -ef | grep process_name 전체 명령 줄을 얻으려면.

Sunos Systems에서 전체 명령 줄을 얻으려면 사용할 수 있습니다.

/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/cmdline Linux의 공간은 다음과 같습니다.

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

이런 식으로 cat 인쇄물 널 문자 ~처럼 ^@ 그리고 당신은 그것들을 사용하는 공간으로 교체합니다 sed; echo Newline을 인쇄합니다.

여러 명령을 사용하여 스트림을 편집하는 대신 하나를 사용합니다 -TR은 한 문자를 다른 문자로 번역합니다.

tr '\0' ' ' </proc/<pid>/cmdline

텍스트를 변환하는 위의 모든 방법 외에도 단순히 '문자열'을 사용하는 경우 기본적으로 별도의 선으로 출력됩니다. 추가 혜택으로 터미널이 나타나는 것을 막을 수있는 숯이 방해 할 수도 있습니다.

두 출력 모두 하나의 명령 :

문자열/proc // cmdline/proc // Environ

실제 질문은 ... Linux에서 프로세스의 실제 명령 줄을 변경하여 CMDLINE에 실행 된 실제 명령 대신 변경된 텍스트를 포함하도록 변경된 프로세스의 실제 명령 행을 볼 수있는 방법이 있습니다.

Solaris에서

     ps -eo pid,comm

UNIX와 같은 시스템에서도 비슷한 것을 사용할 수 있습니다.

Linux에서 Bash가있는 Linux에서 인용 된 Args로 출력하여 명령을 편집하고 다시 실행할 수 있습니다.

</proc/"${pid}"/cmdline xargs --no-run-if-empty -0 -n1 \
    bash -c 'printf "%q " "${1}"' /dev/null; echo

SOLARIS에서 BASH (3.2.51 (1)-릴리스로 테스트) 및 GNU Userland없이 :

IFS=$'\002' tmpargs=( $( pargs "${pid}" \
    | /usr/bin/sed -n 's/^argv\[[0-9]\{1,\}\]: //gp' \
    | tr '\n' '\002' ) )
for tmparg in "${tmpargs[@]}"; do
    printf "%q " "$( echo -e "${tmparg}" )"
done; echo

Linux Bash 예제 (터미널에 붙여 넣기) :

{
## setup intial args
argv=( /bin/bash -c '{ /usr/bin/sleep 10; echo; }' /dev/null 'BEGIN {system("sleep 2")}' "this is" \
    "some" "args "$'\n'" that" $'\000' $'\002' "need" "quot"$'\t'"ing" )

## run in background
"${argv[@]}" &

## recover into eval string that assigns it to argv_recovered
eval_me=$(
    printf "argv_recovered=( "
    </proc/"${!}"/cmdline xargs --no-run-if-empty -0 -n1 \
        bash -c 'printf "%q " "${1}"' /dev/null
    printf " )\n"
)

## do eval
eval "${eval_me}"

## verify match
if [ "$( declare -p argv )" == "$( declare -p argv_recovered | sed 's/argv_recovered/argv/' )" ];
then
    echo MATCH
else
    echo NO MATCH
fi
}

산출:

MATCH

Solaris Bash 예 :

{
## setup intial args
argv=( /bin/bash -c '{ /usr/bin/sleep 10; echo; }' /dev/null 'BEGIN {system("sleep 2")}' "this is" \
    "some" "args "$'\n'" that" $'\000' $'\002' "need" "quot"$'\t'"ing" )

## run in background
"${argv[@]}" &
pargs "${!}"
ps -fp "${!}"

declare -p tmpargs
eval_me=$(
    printf "argv_recovered=( "
    IFS=$'\002' tmpargs=( $( pargs "${!}" \
        | /usr/bin/sed -n 's/^argv\[[0-9]\{1,\}\]: //gp' \
        | tr '\n' '\002' ) )
    for tmparg in "${tmpargs[@]}"; do
        printf "%q " "$( echo -e "${tmparg}" )"
    done; echo
    printf " )\n"
)

## do eval
eval "${eval_me}"


## verify match
if [ "$( declare -p argv )" == "$( declare -p argv_recovered | sed 's/argv_recovered/argv/' )" ];
then
    echo MATCH
else
    echo NO MATCH
fi
}

산출:

MATCH

간단히 사용할 수 있습니다.

ps -o args= -f -p ProcessPid

Linux 터미널에서 "PS -N"을 사용해보십시오. 이것은 보여줄 것입니다 :

1. 실행되는 모든 프로세스, 명령 줄 및 PID

  1. 이 프로그램은 프로세스를 섭취합니다.

그 후에는 어떤 과정을 죽일 과정을 알 수 있습니다

Solaris와 유사하게 유능한 (어떤 한계가 있는지 확실하지 않음)를 얻으려면 ' 파르그, 당신은 linux & osx에서 이것을 사용할 수 있습니다 :

ps -ww -o pid,command [-p <pid> ... ]
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top