Я прошел Именование файлов дампа ядра
В этом документе рассказывается, как получить идентификатор процесса, имя хоста и т. Д. Это работает очень хорошо, если настроено так:
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программа, но не в Python?