コマンドライン:
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 が表示されます。
これは学んで、忘れて、学び直して、繰り返すものです。しかし、これは便利です。pstree コマンドの’s’ フラグは、N に葉がある木を示しています:
pstree -sA $(pgrep badblocks)
systemd---sudo---mkfs.ext4---badblocks
親pidはシェル変数PPIDにあるので、
echo $PPID
すべてのプロセスの親 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 $$
を使用して下さい。
001
現在のプロセスを起動した親プロセスのコマンドをチェックする少し複雑な例です。
そして、top
が動いている間にfを押すと、-u username and -p PID
の出力に表示したいオプションのリストが表示され、表示されているパラメータは大文字で表示され、表示されていないパラメータは小さい文字で表示されます。親プロセスIDの場合は、bを入力してからEnterキーを押すと、トップの出力にPPIDが表示されます。
以下のクイックソリューションも動作するはずです:
ps $$
「pidのすべての親プロセス」を探そうとしていたときに、ここに来ました。結局、そのための再帰関数を自作してみました。
#!/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 "$@"