为什么sigaction说键盘快捷键发送的信号来自PID 0?
我正在进行有关信号处理的圆顶调查.
在这种特殊情况下,我对 Linux上的SIGTSTP(SLES 11上的3.0.101)感兴趣.写了一个捕获SIGTSTP的小程序并打印其父PID和发送信号的进程的PID. 这就是我所看到的: 如果我使用kill -TSTP,则发送进程PID是我运行kill命令的shell的PID,正如预期的那样. 如果我在shell中键入ctrl z,发送过程的PID为0,但我期望我按下ctrl z的shell的PID(我运行了catcher程序) 谁知道为什么会这样?不应该是一些特殊的内核进程的PID吗? Sigaction的文档告诉kill发送的信号将填充si_pid字段,但它没有提到shell快捷方式.也许si_pid = 0表示“未指定的发件人”. 这是我的捕手计划 #include<stdio.h> #include<stdlib.h> #include<signal.h> #include<unistd.h> #include<string.h> void tstp_handler(int num,siginfo_t* info,void* context) { pid_t ppid = getppid(); printf("nReceived TSTP. pid %d ppid %dn",info->si_pid,ppid); } int main(void) { struct sigaction action; memset(&action,sizeof(struct sigaction)); action.sa_sigaction = tstp_handler; action.sa_flags = SA_SIGINFO; sigaction(SIGTSTP,&action,NULL); printf("Registeredn"); printf("My PID is %dn",getpid()); while(1) sleep(1); return 0; } 感谢你并致以真诚的问候 解决方法
请关于struct siginfo的
consult the manual:
没有什么说信息 – > si_pid是活跃的,你可以阅读它.您的测试代码毫无意义. 继续阅读,您发现发送带有kill的信号确实填充了si_pid字段,这就是您在使用kill发送信号时看到正确PID的原因. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |