如何监控或杀死一个由cron启动的进程?

如何监控或杀死一个由cron启动的进程?

我有一些机器人,它们由系统调度程序按给定的时间间隔运行。但有时由于一些逻辑错误,我必须手动停止这些机器人。如何找到调度程序运行的这些进程并杀死它们?

答案1

您可以按名称终止进程。例如,在 Linux、*BSD 和 Solaris 上,终止名称包含(用于完全匹配)pkill myprogram的所有进程。如果您以非 root 用户身份运行它,则只有该用户的进程将被终止,并且还有更多选项可以控制匹配(有关详细信息,请参阅系统上的手册)。myprogrampkill '^myprogram$'

如果您想专门针对由调度程序启动的进程,并且您要手动终止进程,则可以运行ps f(仅限 Linux)或pstree(仅限 Linux)或ptree在树中显示进程,并查看哪些进程是由 cron 启动的。

如果您希望能够通过自制方法自动终止这些进程,请让它们将进程 ID 存储在文件中。这种文件称为pid文件当它用于仅运行进程的单个实例时(这可能是也可能不是您想要的)。如果您想要多个实例,请将 PID 存储在公共目录中的单独文件中;这是执行此操作的 shell 片段:

pid_dir=/var/run/myprogram # must have been created e.g. at boot time
myprogram &
pid_file=$pid_dir/$!.pid
touch "$pid_file"
wait
rm "$pid_file"

如果您有检测失控进程的硬性标准,更好的解决方案是使用通用监视程序,或者在简单的情况下仅限制允许进程运行的时间。您可能会发现这些链接很有帮助:

答案2

我建议在生成它们后将它们的 PID ($$) 弹出到一个文件中。然后您可以使用它来终止该进程。

答案3

大多数编程语言中用于查找无限循环或其他错误情况的基本 try/catch 分支应该可以工作。可能是进程上有一个不活动/无响应的计时器来监视挂起。

相关内容