2012-07-09 42 views
1

我要尋找一個命令,將找到的PID,例如:使用shell腳本來自動終止進程

ps -ef | grep com.sds.afi.rte.cosmos-1.0.0.jar 
cosmos 4690 4689 3 14:27 pts/8 00:00:06 java -Dlog4j.debug -Dlog4j.configuration=file:/data/cosmos/sim/bin/log4j.xml -jar com.sds.afi.rte.cosmos-1.0.0.jar 
cosmos 5484 5482 0 14:30 pts/11 00:00:00 grep com.sds.afi.rte.cosmos-1.0.0.jar 

,然後用殺死這些進程:

kill -9 pid 

我怎樣才能讓一個shell腳本將自動完成上述所有操作?

+0

的可能重複[如何殺死一個給定的部分名稱的所有進程?](http://stackoverflow.com/questions/8987037/how-to-kill-all-processes-with-a-given -partial-name) – tripleee 2012-07-09 07:01:17

回答

1

試試這個:

kill -9 `pidof java` 
+0

[cosmos @ afisvr2:/ data/cosmos/sim/bin] kill -9'pidof com.sds.afi.rte.cosmos-1.0.0.jar' -bash:kill:pidof com。 sds.afi.rte.cosmos-1.0.0.jar:參數必須是進程或作業ID – verystrongjoe 2012-07-09 07:07:39

+0

它不起作用。 – verystrongjoe 2012-07-09 07:08:05

9

killall java

或者更一般地:

killall <processname>

有時候,我有相同名稱的過程,但不同的命令行參數。爲了殺死這些生產工藝和任意處理,而不必在PS中鍵入,然後殺了PID,我這樣做:

ps aux | grep <something> | awk '{print $2}' | xargs kill

其中

  • <something>的是,你要搜索的任何短語ps aux 命令的輸出。
  • awk '{print $2}'將僅過濾出第二 列,該列是PID的
  • kill的列表將被稱爲在每個 那些的PID。

編輯:正如tripleee指出的,除非絕對需要,否則在進程中抨擊kill -9是個壞主意。所以從上面的命令中刪除了部分

+3

'grep'a'| awk'{b}''反模式可以簡化爲'awk'a {b}''。另請參閱http://partmaps.org/era/unix/award.html,除非您確實知道自己在做什麼,否則還建議不要使用「kill -9」。 – tripleee 2012-07-09 06:57:42

0

除了所提供的解決方案ErJab,我創建了一個shell腳本killall模仿'killall行爲:

#!/bin/sh 
ps | grep $1 | awk '{print $1}' | xargs kill -9 

其中我放在/ bin中目錄(後使用chmod + X,當然)

0

我找到pkill/pgrep命令如nikeairj所述是可用的最佳選擇。 我還使用了以下這也可以在的Linux/Unix操作系統工作沒有awk或其他可能不可用命令(我記得沒有beeing能夠在一些AIXHP-UX環境中使用awk

# subsitute myMatch with your process cmdline match, e.g. "firefox", "firefox -P" 
# or anything output by "ps -ef" 
ps -ef|grep myMatch|grep -v grep|sed -e "s/^[^0-9]\+\([0-9]\+\)\s.\+$/\1/"|xargs kill "{}" 
0

你可以在你的shell腳本中包含下面的命令,它將殺死「com.sds.afi.rte.cosmos-1.0.0.jar」的進程ID

kill -9 ps aux | grep com.sds.afi.rte.cosmos-1.0.0.jar | grep -v grep | awk '{print \$2}'

請確保您使用反轉(``)逗號作爲上面使用的pid搜索。

,如果你想從預期的命令執行上面的命令,那麼可以使用以下:

期望 「$」

發送 「殺-9 ps aux | grep com.sds.afi.rte.cosmos-1.0.0.jar | grep -v grep | awk '{print \$2}' \ R」

乾杯, 蘇拉傑

0

我做了一個.sh重啓我的Wifi後,把它放在監視模式下面的幾行。

#Display PID 

echo "Killing network PID'S" 

ps aux | grep wpa_supplicant | awk '{print $2}' | xargs kill 



ps aux | grep NetworkManager | awk '{print $2}' | xargs kill 

#Restart NetworkManager && wpa_supplicant 

echo "Restarting NetworkManager && wpa_supplicant" 

service NetworkManager restart && service wpa_supplicant restart