local $SIG{INT} = \&handle_sigint;
sub handle_sigint {
print "received sigint\n";
}
handle_sigintで誰か(pid /プロセス名)がシグナルを送信したいと思います。
perlでその情報をキャプチャする方法はありますか?シグナルの送信元のIDを取得する
私はCでこれを行うことができ、これはモジュールとしてのpythonに移植されて、私は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
私はそれをキャプチャするc拡張モジュールを書いたので、pythonでこの情報を取得することができますが、perlに移植できる場合はidk – ealeon
OKです。まあ、最悪の場合、Cをperlにインライン展開することができます。正直なところ、シグナルハンドラがその情報を渡したとは思っていませんでした。 – Sobrique