2014-10-30 106 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