[英]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.