Bash 有没有办法找到一个程序中孩子的PID?

Bash 有没有办法找到一个程序中孩子的PID?,bash,Bash,有没有办法找到程序子项的pid 例如,我正在使用系统程序启动pppoe连接: pon dsl-provider 程序将在建立连接后退出,并生成连接所需的pppd: ps wx | grep pppd 882 ? S 0:01 /usr/sbin/pppd call dsl-provider 问题是(直到现在我才这么做),我不想在ps列表中grep,我想要一个准确的答案,在很多情况下我都需要这个(上面只是一个例子)。我该怎么做呢?你可以试试这个 # somehow

有没有办法找到程序子项的pid

例如,我正在使用系统程序启动pppoe连接:

pon dsl-provider
程序将在建立连接后退出,并生成连接所需的
pppd

ps wx | grep pppd
  882 ?        S      0:01 /usr/sbin/pppd call dsl-provider
问题是(直到现在我才这么做),我不想在ps列表中grep,我想要一个准确的答案,在很多情况下我都需要这个(上面只是一个例子)。我该怎么做呢?

你可以试试这个

# somehow get the PID of the parent (882 in your case)
PID=`ps wx | grep pppd | awk '{ print $1; }'`

# formatted output (includes the parent)
ps ax --format pid,ppid,command | grep $PID | grep -v grep

我会使用
ps--ppid ORIGINAL_PROGRAMS_PID
,尽管如果原始程序退出,它可能不起作用。

尝试
pstree
,使用
-p
选项显示进程的进程树及其附加了PID的子进程:

$ pstree -p `pgrep pppd`

一个非常有用的提示,您可以与以下两个答案结合使用:如果您准备好执行原始流程
pondsl提供程序&
,您可以使用
$获得其PID