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