2010-06-08 09:42:29 +0000 2010-06-08 09:42:29 +0000
94
94

GNU/Linuxで指定されたプロセスの親PIDをコマンドラインから取得するには?

質問される前に解決されました: cat /proc/1111/status | grep PPid

回答 (10)

112
112
112
2010-06-08 11:21:06 +0000

コマンドライン:

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=

002 関数やスクリプトに PID が与えられていない場合は、デフォルトで現在のプロセスの PPID が表示されます。

15
15
15
2013-01-31 20:32:13 +0000

これは学んで、忘れて、学び直して、繰り返すものです。しかし、これは便利です。pstree コマンドの’s’ フラグは、N に葉がある木を示しています:

pstree -sA $(pgrep badblocks)
systemd---sudo---mkfs.ext4---badblocks
13
13
13
2012-09-24 11:55:28 +0000

親pidはシェル変数PPIDにあるので、

echo $PPID
12
12
12
2016-02-19 21:31:34 +0000

すべてのプロセスの親 ID (PPID) を表示するには、次のコマンドを使用します:

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

すべての親の PIDs をリストするためには、pstree を使用して下さい(それを持っていなければそれを取付けて下さい):

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

現在のプロセスの親 PID を得るためには、echo $$ を使用して下さい。

6
6
6
2010-06-08 09:44:05 +0000

proc/$PID/statusを読み込みます。簡単にスクリプト化できます:

#!/bin/sh P=$1 if [-z "$P"]; then read P fi cat /proc/"$P"/status | grep PPid: | grep -o "[0-9]\*"
4
4
4
2014-10-21 17:30:05 +0000

Linux の場合:

ps hoppid $thatprocess
2
2
2
2014-10-19 20:08:11 +0000

001

現在のプロセスを起動した親プロセスのコマンドをチェックする少し複雑な例です。

1
1
1
2012-11-23 12:21:12 +0000

そして、topが動いている間にfを押すと、-u username and -p PIDの出力に表示したいオプションのリストが表示され、表示されているパラメータは大文字で表示され、表示されていないパラメータは小さい文字で表示されます。親プロセスIDの場合は、bを入力してからEnterキーを押すと、トップの出力にPPIDが表示されます。

1
1
1
2013-09-12 06:18:04 +0000

以下のクイックソリューションも動作するはずです:

ps $$
0
0
0
2019-10-30 21:51:11 +0000

pidのすべての親プロセス

「pidのすべての親プロセス」を探そうとしていたときに、ここに来ました。結局、そのための再帰関数を自作してみました。

pid_lineage.sh

#!/bin/bash -eu

main(){
  ps -p ${1:-$$} -h -o pid,ppid,args | \
    (
      read pid ppid args
      echo -e "$pid\t$args"
      [[$pid -gt 1]] && main $ppid
    )
}

main "$@"

関連する質問

6
10
10
7
11