收到信号后,如何获取发送者进程的更多信息除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);
 }

我不确定这是否是最正确的方法,但这确实帮了我大忙

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...