2012-01-16 77 views
6

我是新來的UNIX。我想用像這樣的腳本啓動我的Java應用程序:啓動和殺害Java應用程序與shell腳本(Debian的)

這應該是工作。它確實運行了應用程序,它確實寫入了pid文件。但是,當我嘗試與包含此不同的腳本來停止進程:

#!/bin/sh 
kill -9 /var/run/ScriptCheck.pid 

控制檯給我這個錯誤:

bash: kill: /var/run/ScriptCheck.pid: arguments must be process or job IDs 

我最好的猜測是,我不寫正確的代碼在停止腳本中,可能不會提供正確的命令來打開.pid文件。 任何幫助將非常感激。

回答

12

你傳遞一個文件名作爲參數傳遞給kill時,它需要一個(理線ID)號碼,所以只是從文件中讀取的進程ID,並把它傳遞給kill

#!/bin/sh 
PID=$(cat /var/run/ScriptCheck.pid) 
kill -9 $PID 
+0

非常感謝你!這就是我正在尋找的:) – rMaero 2012-01-16 18:50:49

+1

爲了記錄,您可以使用'$( Kevin 2012-01-16 18:59:02

+0

在sh中不起作用,在bash中工作,更好地使用cat – milan 2012-01-16 19:01:52

0

我認爲你需要在ScriptCheck.pid文件的內容(這我假設只有一個與進程的PID的第一行中的條目)讀取。

#!/bin/sh 
procID=0; 
while read line  
do  
    procID="$line"; 
done </var/run/ScriptCheck.pid 
kill -9 procID 
+0

我不明白你寫有while循環,甚至,它仍然沒有工作。控制檯現在顯示相同.. 我也認爲我需要閱讀pid文件的內容,但是這是我不知道該怎麼辦的 – rMaero 2012-01-16 18:44:59

+0

這仍然不起作用,您必須在'kill'內插'$ procID'。 – tripleee 2012-01-16 18:46:57

0

我從來沒有創建自己的PID;你的問題很有趣。

這裏是一個bash代碼片段,我發現:

#!/bin/bash 

PROGRAM=/path/to/myprog 
$PROGRAM & 
PID=$! 
echo $PID > /path/to/pid/file.pid 

您必須具有root權限才能把你的file.pid到/ var/run中的很多文章--referenced - 這是爲什麼守護進程具有root權限。

在這種情況下,你需要把你的PID一些約定的地方,知道你的啓動和停止腳本。您可以使用pid文件存在的事實,例如,不允許第二個相同的進程運行。

的$ PROGRAM &把腳本到後臺「批量」模式。

如果您希望程序腳本退出後流連,我建議用nohup的,這意味着該方案不會死,當你的腳本註銷啓動它。

我只是檢查。 PID以nohup返回。

2

快速和髒方法將是:

kill -9 $(cat /var/run/ScriptCheck.pid) 
2

您的語法錯了,kill需要一個進程ID,而不是一個文件。除非你完全知道你在做什麼,否則你也不應該使用kill -9

kill $(cat /var/run/ScriptCheck.pid) 

xargs kill </var/run/ScriptCheck.pid 
相關問題