pidof 和kill 之间可能发生什么导致“没有这样的进程”?

pidof 和kill 之间可能发生什么导致“没有这样的进程”?

我继承了相当多的代码,并且正在查看一个每小时重新启动一次服务的 cron 作业,没有其他脚本触及此进程并且运行此代码。

#The name of the process has been scrubbed to protect the guilty

procpid=$( pidof proc )
if [ -n "$procpid" ]; then
  kill -HUP $procpid
  procpid=$( pidof proc )
  if [ -z "$procpid" ]; then
    error "PROC ain't running, go figure out why"
  fi
fi

99.9999% 的情况下这都是有效的。问题是,我是一个喜欢五个 9 的人,讨厌通过电子邮件发送给我的莫名其妙的系统日志消息,我想知道为什么:

杀死:(1076)-没有这样的过程

不断地出现在那里。这是否一定意味着在“如果”和“杀死”之间有其他东西正在杀死我的进程,或者可能发生了更阴险的事情?


因为很可能这段代码是好的,实际上其他东西杀死了两行之间的进程,所以是否有“什么杀了我”诊断类检查器的东西,我可以用它至少调试为什么我收到这些警告?

答案1

在不知道更多信息的情况下,尤其是所涉及过程的性质,我不得不说,是的,我猜它正在 和 之间pidof消亡kill。您可以使用killall而不是基本上整个代码块。竞争条件仍然存在,但窗口会更短。

因为很可能这段代码是好的,实际上其他东西杀死了两行之间的进程,所以是否有“什么杀了我”诊断类检查器的东西,我可以用它至少调试为什么我收到这些警告?

UNIX 中不记录信号发送,因此您通常无法知道“是什么杀死了我”。您至少可以轻松地做的是在包装器 shell 脚本中运行相关进程。这至少可以记录进程死亡的原因。

#!/bin/sh

proc
logger "proc died with status $?"

$?如果进程正常退出,则在 0 到 127 之间;如果进程因接收信号而死亡,则大于 128,信号编号​​为$?-128。

相关内容