回答:
コマンドライン:
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上で、必要はありません。
これは私が学び、忘れ、再学習し、繰り返すことの一つです。しかし、それは便利です。pstreeコマンドの「s」フラグは、Nに葉があるツリーを示します。
pstree -sA $(pgrep badblocks)
systemd---sudo---mkfs.ext4---badblocks
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 $$
。
pstree
私がここで見た中で一番素敵なものです。
ps j
それは多くのディストリビューションで利用可能であり、簡単に構成できるため素晴らしいです
/ proc / $ PID / statusを読み取ります。簡単にスクリプト化できます:
#!/ bin / sh P = $ 1 if [-z "$ P"]; それから Pを読む fi cat / proc / "$ P" / status | grep PPid:| grep -o "[0-9] *"
grep '^PPid:' /proc/$1/status | grep -o '[0-9]*'
は、あなたが必要とすることすべてです。(Unixツールがこれを行うことは非常にまれif [ -z ]; then read
です。)
echo $$ | ppid | ppid | ppid
< /some/file grep | grep | ...
。
grep /some/file
$ ps -p $(ps -p $(echo $$) -o ppid=) -o comm=
tmux
現在のプロセスを開始した親のコマンドを確認するもう少し複雑な例comm =をcmd =に変更して完全なコマンドを表示する
grep PPid status |cut -f2
ようなtime(for((i=0;i<1000;i++));do grep PPid status |cut -f2 >/dev/null;done)
; もっと速いものがあるのだろうか?