簡體   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

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

看這里: 顛倒的Ternet ;)

您需要替換腳本中的調用以添加其他圖像。 ImageMagick將是一個很好的工具。

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

Shell腳本本身不是一個進程。 它由shell實例(即進程)解釋。

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

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

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

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


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

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

從外面可能(或幾乎在那里)是不可能的。

我也沒有太多想法,但我有一個你可以嘗試的概念。

獲取緩存代理,使其緩存您想要惡作劇的所有頁面。

然后以某種方式操縱緩存,就像代理緩存test.jpg,進入緩存,並用另一張尺寸和尺寸幾乎相似的圖片替換test.jpg。

然后,你必須使代理不更新其緩存一段時間。

那么它只是一個概念,希望它有效;)

暫無
暫無

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

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