シェルスクリプトで親プロセスIDから子プロセスIDを取得することは可能ですか?
シェルスクリプトを使用して実行するファイルがあるため、新しいプロセスprocess1(親プロセス)につながります。このprocess1は別のプロセスを分岐しましたprocess2(child process)。スクリプトを使用して、次のコマンドを使用してprocess1のpidを取得できます。
cat /path/of/file/to/be/executed
しかし、私は子プロセスのpidを取得することはできません。
ただ使用する:
pgrep -P $your_process1_pid
あなたを正しく理解しているかどうかわかりませんが、これは役に立ちますか?
ps --ppid <pid of the parent>
親プロセスのすべての子プロセスPIDを取得するスクリプトを作成しました。コードは次のとおりです。
function getcpid() {
cpids=`pgrep -P $1|xargs`
# echo "cpids=$cpids"
for cpid in $cpids;
do
echo "$cpid"
getcpid $cpid
done
}
getcpid $1
特殊パラメーター であるため、シェルプロセスは$$
です。
Linuxでは、 proc(5) ファイルシステムはプロセスに関する多くの情報を提供します。おそらく pgrep(1) (/proc
にアクセスする)も役立つかもしれません。
cat /proc/$$/status
を試して、シェルプロセスのステータスを取得してください。
したがって、その親プロセスIDは、たとえば.
parpid=$(awk '/PPid:/{print $2}' /proc/$$/status)
次に、スクリプトで$parpid
を使用して、親プロセスpid(シェルの親)を参照します。
しかし、私はあなたがそれを必要とは思わない!
いくつかの Bashガイド (または注意して 高度なbashスクリプトガイド 、これには間違いがあります)および 高度なLinuxプログラミング を読んでください。
一部のサーバーデーモンプロセス(通常は一意である必要があります)が明示的にpidを/var/run
に書き込んでいることに注意してください。 sshd
サーバーデーモンは、そのpidをテキストファイル/var/run/sshd.pid
)に書き込みます。このような機能を独自のサーバーライクなプログラム(C、C++、Ocaml、Go、Rustまたはその他のでコーディングされた)に追加することもできます言語)。
子プロセスとスレッドを取得するには、pstree -p PID
。階層ツリーも表示されます
ps -axf | grep parent_pid
上記のコマンドは、parent_pid
から生成された各プロセスを出力します。 +++++++++++++++++++++++++++++++++++++++++++++
root@root:~/chk_prgrm/lp#
parent...18685
child... 18686
root@root:~/chk_prgrm/lp# ps axf | grep frk
18685 pts/45 R 0:11 | \_ ./frk
18686 pts/45 R 0:11 | | \_ ./frk
18688 pts/45 S+ 0:00 | \_ grep frk