没完没了的pgrep在linux中给我发电子邮件--我如何才能阻止它?
我遵循在堆栈溢出问题中找到的代码,编写了一个.sh作业来运行一些代码,完成后给我发电子邮件没完没了的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 我似乎已经创造了一个无休止的循环,它继续给我发电子邮件,每一秒的过程是完整的。救命啊。我如何阻止它每分钟给我发
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
),因为它们很少是您真正想要的!谢谢大家,你对计算机和代码的看法完全正确,并且认真思考如何编写无限循环。我发现我实际上已经终止了这个程序,但是电子邮件的队列乱七八糟。再次感谢大家的帮助。