如何解决收到信号后,如何获取发送者进程的更多信息除PID外?像进程名称一样,它是参数
我正在运行嵌入式Linux操作系统,其中systemd为init。有时,我看到systemd Manager在收到SIGUSR2信号后的早期启动期间会进行日志转储。我使用signalfd()
找到了发件人PID,但是当我尝试使用cat /proc/pid/cmdline
打印时,似乎没有踪迹。
解决方法
我在kill()
的{{1}}系统调用中添加了一小段代码来执行脚本,以获取有关发送方进程(cmdline,其父级等)的更多详细信息
kill()系统调用中的代码:
kernel/signal.c
/etc/getSenderInfo.sh
// We are concerned only about SIGUSR2 to init
if (17 == sig && 1 == pid)
{
printk("PID %d sent SIGUSR2 to systemd\n",info.si_pid,pid);
char *envp[] = { "HOME=/",NULL };
char *argv[] = { "/bin/sh","-c","/etc/getSenderInfo.sh",NULL };
call_usermodehelper(argv[0],argv,envp,UMH_WAIT_PROC);
}
我不确定这是否是最正确的方法,但这确实帮了我大忙
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。