簡體   English   中英

看不到通過 ps 命令從另一個腳本啟動的腳本

[英]Cannot see script launched from another script via ps command

所以我有一個名為 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

我從來沒有得到結果。 我可以從終端的腳本中看到 output,沒問題,但我如何檢查 foo.sh 是否正在運行?

您將foo.sh啟動為. ./foo.sh . ./foo.sh

shell 腳本本身並不是一個進程。 它由 shell 的實例解釋,也就是進程。

. 是在當前 shell 環境中執行命令的source命令的別名。 這意味着./foo.sh由執行啟動它的腳本的同一 shell 執行。 它不會創建新進程,這就是您無法使用ps找到它的原因。

您可以將foo.sh作為./foo.sh啟動。 在這種情況下,它將由 shell 的新實例執行,即進入新進程。

但是,根據它的作用,在./foo.sh完成后執行原始 shell 在這兩種情況下可能會有所不同。 當 foo.sh 在同一個foo.sh中執行時,它改變的環境變量屬於同樣執行原始腳本的 shell。 更改它們可能會影響原始腳本。

當您在單獨的腳本中運行foo.sh時,它對環境變量所做的更改不會影響原始腳本。 它們是不同的進程,不共享任何東西。


但是如何檢查foo.sh是否正在運行?

這在啟動foo.sh的腳本中很容易,因為它會等到foo.sh完成后再恢復執行。

從外面看可能是不可能的(或幾乎不可能)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM