我已经这样配置了core_pattern:
$ cat /proc/sys/kernel/core_pattern
|/var/core_interceptor/bin/core_handler_program.sh
如果我通过kill -4 <PID>
杀死进程来生成内核:
$ cat crash.sh
#!/bin/sh
while true
do
echo "PID is $$"
sleep 100000
done
$ ./crash.sh
PID is 92658
Illegal instruction (core dumped)
$ cat core_handler_program.sh
echo "this program will handle core dump"
#!/bin/bash
#touch "/var/lib/systemd/coredump/core.happened.$(date +%T)"
touch "/var/core_interceptor/bin/core.happened.$(date +%T)"
我的程序没有被调用,因为在core.happened
目录中没有看到/var/core_interceptor/bin
文件。
ls -lrt core*
-rwxr-xr-x. 1 root root 176 Sep 7 19:38 core_handler_program.sh
知道为什么我的程序没有被调用吗?
编辑:我创建了一个c program
,并在core_pattern
中进行了配置,该二进制文件正在被调用。它会成功生成text.text
文件。
$ cat hello.c
#include <stdio.h>
#define FILE_NAME "/var/core_interceptor/bin/text.txt"
int main()
{
// printf() displays the string inside quotation
printf("Hello, World!");
FILE* file_ptr = fopen(FILE_NAME, "w");
fclose(file_ptr);
return 0;
}
是否只有二进制文件可以配置?还是也可以调用shell script
?