禁用已运行进程的核心转储

禁用已运行进程的核心转储

我们正在处理一个供应商的产品,该产品很容易崩溃(带有大量核心转储)关闭时(收到后SIGTERM)。

我们不想完全禁用它的核心转储,因为当正常运行时发生崩溃时,核心是有用的。我们可以在杀死某个进程之前禁用该进程的核心转储吗?

除了编写我们自己的核心处理程序之外,那就是......

答案1

我发现的一种方法——令人惊讶地可以在不同的 Unix 上移植——是创建一个目录,核心将被转储到该目录(通常是进程的当前工作目录),不可写的。例如,在此测试中,sleep即使出现分段错误信号,进程也不会生成核心转储:

sleep 50 &    # Launch sleep in the background
chmod u-w .   # Make the current directory unwritable for the owner
kill -11 $!   # Send the backgrounded sleep-process a SIGSEGV
chmod u+w .   # Restore the directory's permissions

这对于我们的目的来说已经足够了——当我们关闭应用程序时,我们不希望在目录中写入新文件(无论是核心转储,还是其他任何东西)——但它可能并不适合所有人...

希望有其他东西——即使是特定于 Linux 的——存在。

相关内容