local $SIG{INT} = \&handle_sigint;
sub handle_sigint {
print "received sigint\n";
}
in handle_sigint Я хотел бы распечатать, кто (имя файла/процесса) отправил сигнал.
Есть ли способ захватить эту информацию в perl?Захват pid сигнала отправителя
я могу сделать это в C, и это переносится на питон как модуль
Ищу эквивалент в Perl
static void csignal_handler(int signum, siginfo_t *siginfo, void *context) {
char *interrupt_msg[150];
if (siginfo->si_pid != 0) {
struct passwd *pwd = getpwuid(siginfo->si_uid);
if (pwd != 0) {
sprintf(interrupt_msg, "Received signal '%d' from process '%d' (%s) of user '%s'\n",
signum, siginfo->si_pid, get_process_name_by_pid(siginfo->si_pid), pwd->pw_name);
} else {
sprintf(interrupt_msg, "Received signal '%d' from process '%d' (%s) of user '%d'\n",
signum, siginfo->si_pid, get_process_name_by_pid(siginfo->si_pid), siginfo->si_uid);
}
printf("%s", interrupt_msg);
}
if (raise_interrupt) {
PyGILState_STATE gstate = PyGILState_Ensure();
PyErr_SetString(PyExc_KeyboardInterrupt, interrupt_msg);
PyGILState_Release(gstate);
} else {
interrupted = 1;
}
}
Уверен, что ответ «нет», потому что это пространство ядра вещь, но я не уверен, что я мог бы найти ссылку для этого. – Sobrique
им удалось захватить эту информацию в python, потому что я написал модуль расширения c, который захватывает его, но idk, если он может быть портом для perl – ealeon
OK. Ну, в худшем случае вы можете встроить C в perl. Я честно не думал, что обработчик сигнала передал эту информацию. – Sobrique