我们正在处理一个供应商的产品,该产品很容易崩溃(带有大量核心转储)关闭时(收到后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 的——存在。