繁体   English   中英

Linux:在进程ID完成或被杀死后发送邮件

[英]Linux: Send mail after a process id finishes or is killed

我希望在其他用户的进程终止或完成后在我的电子邮件中收到通知。 我可以通过另一个用户的进程ID或出现在“ top”命令中的进程的名称来识别另一个用户的进程。

为了做到这一点,我编写了以下脚本:

while true; do
  if ps -ef | grep -q 'process_name'; then
    sleep 1
  else
   echo "complete" | mail -s "process exiting" abc@gmail.com
  fi
done

但是,我发现即使在另一个用户的过程完成或另一个用户终止了他或她的过程之后,我仍然没有收到任何通知或电子邮件。 有人可以帮我一下吗。

问题很可能是此检查:

if ps -ef | grep -q 'process_name'; then

这将永远是true 为什么? 只需直接在命令行上运行它即可,而无需-qgrep ,这将显而易见:

$ ps -ef | grep 'process_name'
user    4550  3349  0 09:17 pts/0    00:00:00 grep --colour=auto process_name
$ echo $?
0

上面的示例显示grep会一直成功,因为它会找到自己!

有很多解决方法。 一种方法是使用pgrep而不是grep

if pgrep 'process_name' > /dev/null; then

防止grep进程自身匹配的另一种常用技术是用[]包围模式中的一个字母,如下所示:

grep -q '[p]rocess_name'

如果您知道的过程,则根本不需要grep ,则可以使用ps本身的退出代码:

if ps -p pid &> /dev/null; then
    sleep 1

pid当然是进程ID。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM