在 Bash 中获取被管道传递进来的命令的进程 PID

阅读时长 2 分钟读完

在 Bash 脚本中,我们可以通过使用管道符号(|)将一个进程的输出传递给另一个进程。但是,有时候我们需要知道被管道传递进来的命令的进程 ID (PID),以便进行一些后续处理。

以下是一个示例,假设我们想要获取 ls 命令的 PID:

在这个例子中,echo $$ 命令会打印当前进程的 PID。因此,我们期望上面的命令能够打印出 ls 命令的 PID,但实际上它只会打印出当前 shell 进程的 PID。

这是因为管道会创建一个子 shell 进程来运行第二个命令。因此,echo $$ 命令只能打印出子 shell 进程的 PID,而不是 ls 命令的 PID。

要解决这个问题,我们可以使用 Bash 内置变量 $! 来获取最近一个在后台运行的进程的 PID。以下是一个示例代码:

-- -------------------- ---- -------
-----------

- -- -- ------------ ---- --
-- - ---- ---------

- --------------- ---
------

---- ----- -----

在这个示例中,我们使用了 $! 变量来获取 grep 命令的 PID。因为 grep 命令是最近一个在后台运行的进程,所以它的 PID 就是被传递进来的命令(即 ls 命令)的 PID。

通过这种方式,我们可以在 Bash 脚本中轻松地获取被管道传递进来的命令的 PID,以便进行一些后续处理。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/60543dc88d846479e750af70

纠错
反馈