2014-10-30 36 views
0

我有我的服務器如何殺死一個ssh腳本運行?

for i in {1..400000} 
do 
    echo "loop $i" 
    echo 
    numberps=`ps -ef | grep php | wc -l`; 
    echo $numberps 
    if [ $numberps -lt 110 ] 
    then 
    php5 script.php & 
    sleep 0.25 
    else 
    echo too much process 
    sleep 0.5 
fi 
done 

上運行此腳本它與共進午餐

./script.sh > /dev/null 2>/dev/null & 

它開闢了110個PHP進程。

我可以殺死進程

我可以殺死killall -9 php5

PHP5的過程,但該腳本將再次創建它們:

我怎樣才能停止腳本一旦共進午餐?

kill %1:當我loggedon使用SSH 如果我loggedout並重新登錄,kill %1jobs -l不工作了這一偉大工程。

+1

是什麼'ssh'與此有關? – Barmar 2014-10-30 13:27:19

+0

'我在{1..400000}'中會擴展到一個大內存;更喜歡'((i = 1; i <= 400000; i ++))' – 2014-10-30 13:30:48

+0

@EdouardThiel它將使用小於1MB。 – 2014-10-30 13:32:43

回答

1

當您啓動腳本,shell將打印出類似這樣:

[1] 1219 

括號中的數字是作業號,第二個數字是PID。你可以殺死整個工作:

$ kill %1 

如果你不記得工號,你可以使用jobs命令來獲取列表:

$ jobs 
[1]+ Running ./script.sh > /dev/null 2>/dev/null & 

工作號又是多少括號內的。在它之前放置%以殺死它。

+0

'jobs -l'給出了作業及其PID。 – 2014-10-30 13:36:30

+0

我登錄並鍵入作業-l 給予什麼(現在是運行!) 任何方式將作業id放入'currentJob.txt'文件文本? – yarek 2014-10-30 15:58:18

+0

除了「jobs -l」僅在我登錄SSH時才起作用。 當我註銷並再次登錄時,kill%1不再起作用 – yarek 2014-10-30 16:44:53

1

試試這個:

echo "To stop, type: kill -USR1 $$" 

main_loop=true 
catch_sigusr1() { main_loop=false ;} 
trap catch_sigusr1 SIGUSR1 

for ((i=1; i<=400000; i++)) 
do 
    $main_loop || { echo "Aborting script."; break ;} 
    echo "loop $i" 
    echo 
    numberps=`ps -ef | grep php | wc -l`; 
    echo $numberps 
    if [ $numberps -lt 110 ] 
    then 
    php5 script.php & 
    sleep 0.25 
    else 
    echo too much process 
    sleep 0.5 
fi 
done 
+0

我輸入:kill -USER1 $$ THIS LOGGED我OUT並且我不能以kill%1結束任務 – yarek 2014-10-30 16:42:51

+0

嘗試'kill -USR1 pid'而不是'kill -USER1 pid'。 – 2014-10-30 16:55:35

+0

我試過了:沒有成功..問題可能來自我午餐這個命令,然後用'exit'命令註銷,然後回到SSH。 – yarek 2014-10-30 16:58:47