【问题标题】:how to kill a ssh script running?如何杀死正在运行的 ssh 脚本?
【发布时间】:2014-10-30 13:25:26
【问题描述】:

我的服务器上运行着这个脚本

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:当我登录到 SSH 时,这非常有用 如果我注销并再次登录,kill %1jobs -l 将不再起作用。

【问题讨论】:

  • ssh 和这个有什么关系?
  • for i in {1..400000} 将扩展为大内存;更喜欢for ((i=1; i<=400000; i++))
  • @EdouardThiel 它会使用不到 1MB。
  • echo {1..400000}|wc -c 给出 2688895,这对于一个简单的循环来说相当浪费内存。

标签: linux bash ssh debian


【解决方案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

【讨论】:

  • 我输入:kill -USER1 $$ THIS LOGGED me OUT了,我不能再用 kill %1 结束工作了
  • 尝试kill -USR1 pid 而不是kill -USER1 pid
  • 我试过了:没有成功..问题可能来自我午餐这个命令,然后用'exit'命令注销,然后回到SSH。
【解决方案2】:

当您启动脚本时,shell 将打印如下内容:

[1] 1219

括号中的数字是作业号,第二个数字是PID。您可以通过以下方式杀死整个工作:

$ kill %1

如果不记得作业号,可以使用jobs命令获取列表:

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

作业编号还是括号中的编号。在它前面加上% 可以杀死它。

【讨论】:

  • jobs -l 提供作业及其 PID。
  • 我登录并输入了作业 -l 没有给出任何东西(它现在正在运行!)以任何方式将作业 ID 放入“currentJob.txt”文件文本中?
  • 除了“jobs -l”之外,仅当我登录到 SSH 时才有效。当我注销并再次登录时,kill %1 不再起作用
  • 作业控制仅在进程是当前 shell 的子进程时起作用。除非您使用nohup,否则该进程应该在您注销时被终止。如果您希望在断开连接时能够保持 shell 会话,请查看screen
猜你喜欢
  • 2019-03-21
  • 1970-01-01
  • 2012-06-14
  • 1970-01-01
  • 2010-12-23
  • 1970-01-01
  • 1970-01-01
  • 2018-12-10
相关资源
最近更新 更多