Linux 当接收到信号时,如何获得发送方进程的更多信息(PID除外)?比如进程名和它';s args

Linux 当接收到信号时,如何获得发送方进程的更多信息(PID除外)?比如进程名和它';s args,linux,systemd,init,pid,Linux,Systemd,Init,Pid,我正在运行一个嵌入式Linux操作系统,systemd作为init。有时,我看到systemd manager在接收到SIGUSR2信号的早期启动期间进行日志转储。我使用signalfd()找到了发送方PID,但当我尝试使用cat/proc/PID/cmdline打印时,似乎没有它的踪迹。我在kill()系统调用kernel/signal.c中添加了一小段代码,以执行一个脚本来获取有关发送方进程的更多细节(cmdline、其父级等) kill()系统调用中的代码: // We are conc

我正在运行一个嵌入式Linux操作系统,systemd作为init。有时,我看到systemd manager在接收到SIGUSR2信号的早期启动期间进行日志转储。我使用
signalfd()
找到了发送方PID,但当我尝试使用
cat/proc/PID/cmdline
打印时,似乎没有它的踪迹。

我在
kill()
系统调用
kernel/signal.c
中添加了一小段代码,以执行一个脚本来获取有关发送方进程的更多细节(cmdline、其父级等)

kill()系统调用中的代码:

 // 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);
 }
/etc/getSenderInfo.sh

#!/bin/sh
pid=$(dmesg | grep -w "sent SIGUSR2 to systemd" | awk '{print $2}')

while [ $pid -ne 0 ]
do
    echo "ps -o ppid= -o cmd= -p $pid"
    ppid=$(ps -o ppid= -o cmd= -p $pid)
    echo $ppid
    pid=$(echo $ppid | awk '{print $1}')
done
我不确定这是否是最正确的方法,但这对我来说是个好办法