2014-09-29 104 views
30

過程中,我試圖通過PID文件要殺死一個進程:殺死由pid文件

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

PID文件包含了進程號。但是執行kill會讓我沒有標準輸出,並且進程仍然存在。但是,這是有效的:

kill -9 PID 

第一個kill命令有什麼問題?它是否無法從文件中提取PID? PID文件的

示例內容:

5424 

kill -9 5424 

作品。

+2

我在猜測,但試試'cat /var/run/myProcess.pid | xargs kill -9';我的假設是你在pid文件中有空白。 – 2014-09-29 19:11:04

+0

@ElliottFrisch nope不起作用 – 2014-09-29 19:12:33

+0

發佈pid文件的內容。 – 2014-09-29 19:13:03

回答

48

我相信你遇到了這個問題,因爲你的默認shell是dash(debian almquist shell),但是你使用的是bash語法。您可以用類似的家當行指定的bash,

#!/usr/bin/env bash 

或者,你可以使用由admdrew建議破折號和bash兼容回剔表達意見

kill -9 `cat /var/run/myProcess.pid` 

無論如何,你可以不要依賴/bin/sh成爲bash。

29

在某些情況下,更緊湊:

pkill -F /var/run/myProcess.pid 

是要走的路。我有麻煩的品種有:

kill $(cat /var/run/myProcess.pid) 
# Or 
kill `cat /var/run/myProcess.pid` 

,當我不得不把命令放到別的一些東西,可能會使用不同的規則解析它,就像Monit併爲其啓動/停止命令。