在 Bash 脚本中,我们可以通过使用管道符号(|
)将一个进程的输出传递给另一个进程。但是,有时候我们需要知道被管道传递进来的命令的进程 ID (PID),以便进行一些后续处理。
以下是一个示例,假设我们想要获取 ls
命令的 PID:
$ ls | echo $$
在这个例子中,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