我想爲我的機器上運行的matlab作業創建一個輕量級內存分析器。有一個或零個matlab作業實例,但其進程ID經常更改(因爲它實際上是由另一個腳本調用的)。如何獲得手錶使用引號運行bash腳本
因此,這裏是bash腳本,我放在一起登錄內存使用:
#!/bin/bash
pid=`ps aux | grep '[M]ATLAB' | awk '{print $2}'`
if [[ -n $pid ]]
then
\grep VmSize /proc/$pid/status
else
echo "no pid"
fi
當我運行該腳本在bash這樣的:
./script.sh
它工作得很好,給我以下結果:
VmSize: 1289004 kB
這正是我想要的。
現在,我想定期運行它。所以我watch
運行它,就像這樣:
watch ./script.sh
但在這種情況下,我只能接受:
no pid
請注意,我知道了MATLAB作業仍在運行,因爲我可以看到它top
上的同一個pid,此外,我知道每個matlab作業需要幾個小時才能完成。
我很確定在設置pid時引號有什麼問題。我只是無法弄清楚如何解決它。任何人都知道我做錯了什麼?
PS。 在watch
的手冊頁中,它表示命令由sh -c
執行。我確實運行了像sh -c ./script
這樣的腳本,它工作的很好,但watch
沒有。
+1爲合理的問題(和格式化!)。最可能的解釋是,當'watch'決定檢查它時,matlab沒有運行。我會插入'ps aux | grep'[M] ATLAB''上面'pid = ...'行的行,看看你的腳本是否找到了。你看過「男士手錶」嗎?有沒有關於同步搜索的任何線索,比如你的嘗試?祝你好運! – shellter
謝謝@shellter。我應該在這個問題中提到這個問題:matlab確實在運行。我可以一直使用相同的pid在頂部看到它。我也從工作中知道matlab運行時需要幾個小時,並且在我運行'watch'時不會被終止。我會更新這個問題來反映這一點。 – farmir
我剛剛測試過你的腳本。但它在我的電腦上工作得很好! –