2013-04-05 97 views
0

EI要明白什麼是這個過程中的問題;當一個進程正在運行時,它不會返回計數。它直接將在呼應這種情況下「發現$ PWD沒有運行質量管理體系的過程」。shell腳本意味着

QMS_PROCESS=`ps -ef | grep $PWD/qms_kernel | grep -v grep | cut -f6 -d' '` 
QMS_PROCESS_COUNT=`echo $QMS_PROCESS | egrep [0-9] | wc -c` 
if [ $QMS_PROCESS_COUNT -eq 0 ] 
    then 
    echo "No QMS process found running on $PWD" 
    else 
    kill -15 $QMS_PROCESS 
    echo "QMS process $QMS_PROCESS stopped on $PWD" 
fi 

任何一個可以請幫我在這認識。

+1

當您運行的'ps -ef | grep $ PWD/qms_kernel | grep -v grep |手動切割-f6 -d''',你看到你期望的行嗎? – phs 2013-04-05 19:27:58

+0

感謝您的回覆。我手動運行,但沒有顯示任何東西。 – user1771540 2013-04-08 17:02:02

回答

1

怎麼樣這種方法:

QMS_PROCESS=`pidof "$PWD/qms_kernel"` 
if [ -z "$QMS_PROCESS" ]; then 
    echo "No QMS process found running on $PWD" 
else 
    kill -15 $QMS_PROCESS 
    echo "QMS process ($QMS_PROCESS) stopped on $PWD" 
fi 
+0

感謝您的回覆JoaaMorais,但我可以改變腳本。我只是想了解劇本。 – user1771540 2013-04-08 17:00:48

+0

Hello @ user1771540。第一行採用所有「$ PWD/qms_kernel」進程的PID,用空格分隔,並將它們保存到QMS_PROCESS變量中。如果沒有一個進程(-z表示「空字符串」),請轉到「否QMS ...」分支,否則將終止所有找到的進程。 – 2013-04-08 23:36:13

0

第一行運行ps -ef列出所有進程,查找特定qms_kernel過程與路徑在它(這是$PWD部分,它是有點出人意料)前將當前目錄,然後過濾掉grep命令並運行一個神祕的cut命令來收集第6個字段。

第二行計數的數字個數,這也是奇數一件小事。

if塊檢查是否在$QMS_PROCESS_COUNT的值是0或不是。如果是,它會報告「沒有QMS process`否則嘗試終止(信號15,又名TERM或SIGTERM)過程(ES),並報告過程被停止。

+0

感謝您的回覆。我正在尋找這個答案。該qms_kernel有一些工作,但削減-f6 -d''正在收集第六個領域,這是一個問題。我新來我的項目,我不知道什麼qms_kernel做。反正我知道這個劇本里發生了什麼。感謝喬納森:) – user1771540 2013-04-08 16:59:22

+0

喬納森 - 實際上發生了什麼是我試圖停止進程並更新數據到該進程並嘗試啓動該進程。一些如何不停止進程,但我殺死了進程手動通過使用kill -15'進程ID運行'。但是,當我更新其數據時,我試圖更新的是移動到我期待的位置,但是當我再次啓動該過程時,它沒有采取新的數據。我可以通過大型機應用程序檢查這些數據,但沒有顯示在那裏。它僅顯示以前的數據。你能幫我解決問題嗎?在此先感謝 – user1771540 2013-04-08 17:12:31

+0

在我的系統中,PID(這是你需要殺死的過程是什麼)是從'PS -ef'輸出的場2,不能在現場6('削減-i -d'-f2' )。使用'bash -x script'來查看腳本執行的內容。除非你確信它會向正確的進程發送正確的信號,否則不要運行'kill'命令(例如,使用'echo kill -15 $ QMS_PROCESS'來查看它會做什麼。 – 2013-04-08 18:10:15