$cat t.sh
grep "12" test | wc -c
我想知道運行時將創建多少個進程。 我用如何獲取shell腳本的所有進程名稱?
./t.sh;ps -aux | grep "t.sh"
,但它沒有工作,因爲「./t.sh」已經跑過來時,PS是工作。
我該如何達到這個目標?
$cat t.sh
grep "12" test | wc -c
我想知道運行時將創建多少個進程。 我用如何獲取shell腳本的所有進程名稱?
./t.sh;ps -aux | grep "t.sh"
,但它沒有工作,因爲「./t.sh」已經跑過來時,PS是工作。
我該如何達到這個目標?
取決於您正在運行的系統。如果您有strace
,則可以跟蹤所有的fork
系統調用。問題是雖然有些系統使用fork
,一些vfork
和一些clone
,你將不得不嘗試。在linux上:
strace -c -f -evfork ./t.sh
應該給你一個總結。 -c
給出計數,-f
表示「跟蹤」子進程,而-evfork
表示跟蹤vfork
內核調用。輸出到stderr,但您可以使用-o
選項將其重定向到一個文件(如果您在此處指定命名管道,則可以使用一些簡潔的技巧)。
你可以嘗試
./t.sh;ps -aux | grep -E "t.sh"
-E比賽正是你需要的,沒有別的,我不是在Linux所以我現在不能肯定,但有些事做這種選擇
你的錯誤是分號。它告訴shell等待t.sh完成後再運行grep。使用&符號來告訴shell在後臺運行t.sh。此外,而不是grep的你會更好使用pstree看你t.sh這樣的腳本生成的進程列表:
$ ./t.sh & pstree $(pgrep t.sh)
'-E'選項'grep'方式使用擴展的正則表達式,而比基本的正則表達式。 'grep -E'與'egrep'等效(在Linux上完全一樣)。 – cdarke