web-dev-qa-db-ja.com

コマンドラインからGNU / Linuxで特定のプロセスの親PIDを取得する方法

尋ねられる前に解決されました:cat /proc/1111/status | grep PPid

82
Vi.

コマンドライン:

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を指定する必要があります。

96

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

echo $PPID
12
Ivan Novotny

これは私が学ぶこと、忘れること、再学習すること、繰り返すことのうちの1つです。しかしそれは便利です。 pstreeコマンドの 's'フラグは、Nに葉がある木を表示します。

pstree -sA $(pgrep badblocks)
systemd---Sudo---mkfs.ext4---badblocks
12
user194394

このコマンドは:

ps j

すべてのプロセスの親ID(PPID)を表示します。

単一プロセスの場合は、単にps j 1234のようにPIDを渡します。

値のみを抽出するには、次のようにawkで出力をフィルター処理します。

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

すべての親のPIDを一覧表示するには、次のようにpstreeを使用します。

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

現在のプロセスの親PIDを取得するには、次にecho $$を使用します。

11
kenorb

/ proc/$ PID/statusを読みます。簡単にスクリプトを書くことができます:

#!/ bin/sh 
 P = $ 1 
 if [-z "$ P"];次に
 P 
 fi 
 cat/proc/"$ P"/status |を読んでください。 PPID: grep -o "[0-9] *" 
5
Vi.

Linuxの場合

ps hoppid $thatprocess
4
jthill
$ ps -p $(ps -p $(echo $$) -o ppid=) -o comm=
    tmux

現在のプロセスを開始した親のコマンドをチェックするもう少し複雑な例full commandを見るには、comm =をcmd =に変更します

2
sebastian_t

これはまた働くべきである速い解決はある:

ps $$
1
Gevork Palyan

-u username and -p PIDのように、必要なオプションを指定してtopを実行します。

そしてtopが働いている間 fこれは、top出力に表示したいオプションのリストを表示し、表示されているパラメータは大文字で表示され、表示されていないパラメータは小文字で表示されます。

そのため、パラメータの前に文字を入力することで、それを有効または無効にすることができます。親プロセスIDの場合は、入力する必要があります b そしてを押す EnterPPIDが一番上の出力に表示されます。

1
Praveen S.