Bash 有没有办法找到一个程序中孩子的PID?
有没有办法找到程序子项的pid 例如,我正在使用系统程序启动pppoe连接: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
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代码>。