커맨드 라인에서 GNU / Linux에서 주어진 프로세스의 부모 PID를 얻는 방법?


90

요청하기 전에 해결 : cat /proc/1111/status | grep PPid


더 빠름 : grep PPid status |cut -f2처럼 time(for((i=0;i<1000;i++));do grep PPid status |cut -f2 >/dev/null;done); 더 빠른 것이 있는지 궁금하십니까?
물병 자리 힘

1
@AquariusPower 당신이 요청한 이후, fgrep는 grep보다 빠릅니다. fgrep PPid status |cut -f2
jbo5112

sed는 grep and cut보다 훨씬 빠릅니다.sed -rn '/PPid/ s/^.*:\s+// p' < status
Marian

답변:


107

명령 줄 :

ps -o ppid= -p 1111

기능:

ppid () { ps -p ${1:-$$} -o ppid=; }

별명 (기능이 바람직 함 ) :

alias ppid='ps -o ppid= -p'

스크립트:

#!/bin/sh
pid=$1
if [ -z $pid ]
then
    read -p "PID: " pid
fi
ps -p ${pid:-$$} -o ppid=

함수 나 스크립트에 PID가 제공되지 않으면 기본적으로 현재 프로세스의 PPID를 표시합니다.

별명을 사용하려면 PID를 제공해야합니다.


=기호는 적어도 OS X 10.8.2에 필요하지 않습니다.
jtbandes

5
@jtbandes : 여기에 사용 된 등호는 헤더 행 ( LinuxOS X ) 의 출력을 억제합니다 .
Dennis Williamson

13

이것은 내가 배우고 잊고 다시 배우고 반복하는 것들 중 하나입니다. 그러나 유용합니다. pstree 명령의 's'플래그는 N에 잎이있는 나무를 보여줍니다.

pstree -sA $(pgrep badblocks)
systemd---sudo---mkfs.ext4---badblocks

12

부모 pid는 쉘 변수 PPID에 있으므로

echo $PPID

1
예, 그러나 1. 다른 프로세스의 부모 pid를 원합니다. 2. 모든 조상을 통과하여 초기화 할 수 있기를 원합니다.
Vi.

1
반면에를 사용 $PPID하면 Google 이이 페이지에 대한 답변으로 제안한 문제를 해결했습니다.
Paul Whittaker

12

PPID모든 프로세스의 상위 ID ( ) 를 인쇄하려면 다음 명령을 사용하십시오.

ps j

단일 프로세스의 경우 다음과 같이 PID를 전달하십시오 ps j 1234.

값만 추출하려면 awk다음과 같이 출력을 필터링하십시오 .

ps j | awk 'NR>1 {print $3}' # BSD ps
ps j | awk 'NR>1 {print $1}' # GNU ps

모든 부모의 PID를 나열하려면 다음을 사용하십시오 pstree(없는 경우 설치).

$ pstree -sg 1234
systemd(1)───sshd(1036)───bash(2383)───pstree(3007)

현재 프로세스의 상위 PID를 얻으려면을 사용하십시오 echo $$.


1
pstree내가 본 것 중에 가장 좋은 것입니다.
sudo

ps j그것은 많은 배포판에서 사용할 수 쉽게 작성 가능하기 때문에 중대하다
코너 맥코믹

6

/ proc / $ PID / status를 읽으십시오. 쉽게 스크립팅 할 수 있습니다 :

#! / bin / sh
P = $ 1
[-z "$ P"]이면; 그때
    P를 읽으십시오
fi
고양이 / proc / "$ P"/ status | grep PPid : | grep -o "[0-9] *"

2
grep '^PPid:' /proc/$1/status | grep -o '[0-9]*'당신이 필요한 전부입니다. ( 유닉스 도구가하는 일은 매우 드if [ -z ]; then read
un니다

@grawity 그것은echo $$ | ppid | ppid | ppid
Vi.

2
고양이 UUOC 쓸모없는 사용
펠리페 알바 레즈

@FelipeAlvarez, 내 손은 입력하는 데 사용되지 않습니다 < /some/file grep | grep | ....
Vi.

2
무엇에 대한grep /some/file
펠리페 알바레즈


2
$ ps -p $(ps -p $(echo $$) -o ppid=) -o comm=
    tmux

현재 프로세스를 시작한 부모의 명령을 확인하는 좀 더 복잡한 예제 comm =을 cmd =로 변경하여 전체 명령을 확인하십시오.


에코의 쓸모없는 사용 ? ;)
bobbogo

실제로 일부 터미널에서 필요합니다. 솔직히 말해서 정확히 기억하지 못하지만 실제로 문제가 해결되었습니다. : D
sebastian_t


1

top원하는 옵션으로 실행하십시오 -u username and -p PID.

그리고 top작동 하는 동안을 누르면 출력 f에 표시하려는 옵션 목록이 표시되고 top표시된 매개 변수는 대문자로 표시되고 표시하거나 표시하지 않는 매개 변수는 소문자로 표시됩니다.

따라서 매개 변수 앞에 문자를 입력하면 활성화 또는 비활성화 할 수 있습니다. 부모 프로세스 ID의 경우 입력 b한 다음을 눌러 EnterPPID를 맨 위 출력에 표시합니다.


1
비 대화식으로 사용됩니다. 나는 htop당신이 PPID열 을 구성 할 수 있다는 것을 이미 알고 있습니다 .
Vi.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.