【问题标题】:How to know if a running background process cored如何知道正在运行的后台进程是否核心
【发布时间】:2016-08-05 23:47:10
【问题描述】:

我有一个从脚本运行的进程myprocess。是否可以检查此进程是否执行成功或崩溃?

这就是我的脚本的样子

myprocess 12 &
sleep 12
# I want to check here if the process crashed

我在后台运行进程的原因很简单。我想在sleeping 之前完成其他任务。醒来后,我想看看进程是优雅退出还是崩溃(转储核心)。

PS:如果需要任何其他详细信息或更多代码,请在下方评论。

【问题讨论】:

  • 哪个操作系统?
  • 您不能随意假设内核允许核心转储。内核参数fs.suid_dumpable 允许/禁止核心转储。在大多数 RHEL 6.8+ 衍生版本中,这被设置为不允许。您还需要找到核心转储的放置位置。默认值在pwd 中,但可以配置为在其他地方转储并使用不同的名称模式。这是在kernel.core_pattern 中设置的。

标签: c linux shell core


【解决方案1】:

假设您在$PWD没有一个名为 core 的文件(否则它将被删除),这是 懒惰 的方法它:

(请注意,this [lazy 核心文件方法only] 假设 sysctl fs.suid_dumpable 的正确参数化,如果 myprocess 将有它的privilege levels changed or is execute only。还要注意kernel.core_pattern 设置可能会导致核心文件被转储到其他地方而不是$PWD。请参阅this article 以正确设置它。感谢@alvits 指出这两个潜在问题。无论如何,我真的不推荐使用以下核心文件方法。)

#!/bin/bash

rm -f core
ulimit -c unlimited

myprocess 12 &

# ... Do your stuff ...

sleep 12

if [ -f core ]; then
    echo "This is a minimal example to show that the program dumped core."
fi

另请注意,这仅在同时没有其他任何东西将核心转储到$PWD时才有效

更清洁的方法:

#!/bin/bash

(rm -f /tmp/myprocess.success && myprocess 12 && touch /tmp/myprocess.success) &

# ... Do your stuff ...

sleep 12

if [ -f /tmp/myprocess.success ]; then
    echo "myprocess returned EXIT_SUCCESS. But if it didn't returned before sleep 12 elapsed, this will fail."
fi

正确的方法:

#!/bin/bash

myprocess &

# Store myprocess PID
MYPROCESS_PID="$!"

# ... Do your stuff here ....

# Wait until myprocess returns
wait "${MYPROCESS_PID}"

# Store myprocess exit status (returned by wait)
$ret="$?"

if [ "${ret}" -gt 0 ]; then
    echo "Myprocess didn't exited with EXIT_SUCCESS"
fi

【讨论】:

  • 您可能需要补充一点,第一个解决方案依赖于 fs.suid_dumpable 用于具有 setuid 的应用程序,该应用程序通常关闭,kernel.core_pattern 确定核心的位置和名称模式。如果它在他们的环境中不起作用,OP 和未来的读者可能会感到失望。
  • 当然,虽然我真的不建议在这种情况下使用第一种方法。不过会更新。谢谢。
  • 无论如何,据我所知,fs.suid_dumpable 只影响 setuid 二进制文件,我不认为这是 OP 的情况。
猜你喜欢
  • 2013-11-18
  • 1970-01-01
  • 2012-07-17
  • 1970-01-01
  • 1970-01-01
  • 2016-06-19
  • 2011-04-11
  • 2013-09-19
  • 1970-01-01
相关资源
最近更新 更多