【发布时间】:2018-09-10 22:21:10
【问题描述】:
此文档说明如何获取进程 ID、主机名等。如果配置如下:
echo "|/var/core_interceptor/bin/hello %P %u %g %s %t %c %e %h %d %E %i %p" > /proc/sys/kernel/core_pattern
或
echo "|/var/core_interceptor/bin/systemd-coredump %P %u %g %s %t %c %e %h %d %E %i %p" > /proc/sys/kernel/core_pattern
#include <stdio.h>
#define FILE_NAME "/var/core_interceptor/bin/text.txt"
int main(int argc, char *argv[])
{
int i = 0;
FILE* file_ptr = fopen(FILE_NAME, "w");
for (i = 0; i < argc; i++)
fprintf(file_ptr, "\n%s", argv[i]);
fclose(file_ptr);
return 0;
}
这个hello.c 除了将它写入一个文本文件之外没有做任何事情。当我看到生成的文件时,我看到所有带有值的参数,即我看到实际的 PID 等。
但是,当我像这样配置 python 程序时:
echo "|/var/core_interceptor/bin/pyhandler.py %P %u %g %s %t %c %e %h %d %E %i %p" > /proc/sys/kernel/core_pattern
我在创建的文件中没有得到任何参数。
$ cat pyhandler.py
#!/usr/bin/python
import sys
f = open("/var/core_interceptor/bin/text1.txt", "w")
f.write("Called")
f.write(sys.argv[0:])
f.close()
这个 py 脚本被调用但不打印参数:
$ cat text1.txt
Called
为什么我可以在 C 程序中获取 args 而在 python 中却不行?
【问题讨论】: