Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
没完没了的pgrep在linux中给我发电子邮件--我如何才能阻止它?_Linux_Loops_Email_While Loop_Grep - Fatal编程技术网

没完没了的pgrep在linux中给我发电子邮件--我如何才能阻止它?

没完没了的pgrep在linux中给我发电子邮件--我如何才能阻止它?,linux,loops,email,while-loop,grep,Linux,Loops,Email,While Loop,Grep,我遵循在堆栈溢出问题中找到的代码,编写了一个.sh作业来运行一些代码,完成后给我发电子邮件 while true; do if pgrep compile3 > /dev/null; then sleep 1 else echo "complete" | mail -s "process exiting" EMAIL@gmail.com fi done 我似乎已经创造了一个无休止的循环,它继续给我发电子邮件,每一秒的过程是完整的。救命啊。我如何阻止它每分钟给我发

我遵循在堆栈溢出问题中找到的代码,编写了一个.sh作业来运行一些代码,完成后给我发电子邮件

while true; do
  if pgrep compile3 > /dev/null; then
    sleep 1
  else
   echo "complete" | mail -s "process exiting" EMAIL@gmail.com
  fi
done
我似乎已经创造了一个无休止的循环,它继续给我发电子邮件,每一秒的过程是完整的。救命啊。我如何阻止它每分钟给我发20封电子邮件

我尝试了
pkillall
killall pgrep

我不知道如何阻止所有这些电子邮件。
谢谢

A
break
终止循环将在满足理想条件后停止循环的执行

while true; do
  if pgrep compile3 > /dev/null; then
    sleep 1
  else
   echo "complete" | mail -s "process exiting" EMAIL@gmail.com
   break
  fi
done

谢谢非常有用。关于如何结束当前正在运行的循环有什么建议吗?重启服务器是一种选择吗?如果您找不到正在运行的脚本的进程号,或者无法通过发送SIGINT来终止它,那么重新启动服务器始终是一个快速的解决方案。这通常是计算机的一个缺点--它们完全按照您告诉它们的去做。。。您还应该注意,如果进程被找到,您将
sleep 1
,但如果进程未被找到,则不应这样做(您只需尽可能快地发送电子邮件)。你应该总是考虑限制任何潜在的失控循环。您可以(除了添加
break
)简单地将测试重构为
if!pgrep compile3>/dev/null;然后呼应“完成”;打破fi;睡眠1
以便
sleep
语句完全位于
if
语句之外。运行
ps
(您可能需要添加-a或类似项)以查找正在运行
sleep
的进程,然后运行
kill
它的父进程。最终你可能需要杀掉-9。wrt
编写了一个“.sh”作业
-shell脚本不以“.sh”或任何其他后缀结尾,因此术语很奇怪,令人讨厌,只需说
编写了一个shell脚本
。在编写一个无限循环之前,一定要仔细考虑很久(例如,
为true;do
),因为它们很少是您真正想要的!谢谢大家,你对计算机和代码的看法完全正确,并且认真思考如何编写无限循环。我发现我实际上已经终止了这个程序,但是电子邮件的队列乱七八糟。再次感谢大家的帮助。