0

有没有办法找到一个程序的孩子的pid?

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

pon dsl-provider

程序将在建立连接后退出并产生一个pppd需要的连接:

ps wx | grep pppd
  882 ?        S      0:01 /usr/sbin/pppd call dsl-provider

问题是(直到现在我一直在这样做)我不想在 ps 列表中使用 grep,我想要一个准确的答案,并且在很多情况下我都需要这个(以上只是一个示例)。我怎样才能做到这一点?

4

3 回答 3

1

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

$ pstree -p `pgrep pppd`
于 2012-05-24T13:04:37.257 回答
0

我会使用ps --ppid ORIGINAL_PROGRAMS_PID,尽管如果原始程序退出它可能无法正常工作。

于 2012-05-24T12:43:14.957 回答
0

你可以试试这个

# 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
于 2012-05-24T12:38:21.123 回答