无法通过 ps 命令查看从另一个脚本启动的脚本

无法通过 ps 命令查看从另一个脚本启动的脚本

我有一个名为 test.sh 的脚本。这会调用另一个脚本 foo.sh,如下所示:

#!/bin/bash
echo "starting other script"
. ./foo.sh

foo.sh 脚本如下所示:

#!/bin/bash
sleep 10
echo "running"
sleep 10

现在,当我从终端执行以下操作时:

ps -def | grep foo.sh | grep -v grep

我从来没有得到结果。我可以在终端中看到脚本的输出,没问题,但是如何检查 foo.sh 是否正在运行?

答案1

您启动foo.sh. ./foo.sh.

shell 脚本本身并不是一个进程。它由 shell 的实例(即进程)解释。

.source是在当前 shell 环境中执行命令的命令的别名。这意味着./foo.sh由执行启动它的脚本的同一个 shell 执行。它不会创建新进程,这就是为什么您无法使用 找到它ps

您可以启动foo.sh./foo.sh.在这种情况下,它将由 shell 的新实例执行,即进入新进程。

但是,根据它的作用,./foo.sh完成后原始 shell 的执行在这两种情况下可能会有所不同。当foo.sh在同一个shell中执行时,它改变的环境变量属于也执行原脚本的shell。更改它们可能会影响原始脚本。

当您foo.sh在单独的脚本中运行时,它对环境变量进行的更改不会影响原始脚本。它们是不同的进程,不共享任何内容。


但我如何检查是否foo.sh正在运行?

这对于启动的脚本来说很容易,foo.sh因为它会等到foo.sh完成后再恢复执行。

从外部来看这可能是不可能的(或几乎不可能)。

相关内容