如何从信号中找出进程的 pid 在 linux 的 c++ 中启动?

Posted

技术标签:

【中文标题】如何从信号中找出进程的 pid 在 linux 的 c++ 中启动?【英文标题】:How to find out pid of the process from a signal is initiated in c++ in linux? 【发布时间】:2014-06-10 06:36:07 【问题描述】:

我的应用程序使用 fork() 创建子进程。我在父进程中有一个信号处理程序。在信号处理程序中,我必须为父母和孩子做不同的逻辑。 即在信号处理程序中

case SIGSEGV:
              if (parent)
              
                  cout<<"signal from parent";
              
              else
              
                  cout <<"signal from child";
              

有可能吗?还是我必须保留两个不同的信号处理程序?

【问题讨论】:

信号总是进入目标进程。 SIGSEGV 总是从进程内部生成,除非您从外部进程触发它们(在SIGSEGV 的情况下不建议这样做)。 不知道有任何此类“来源信息”可用。 【参考方案1】:

检查signalfd (man signalfd) 与selectread 的用法,因为最后一个将为您提供signalfd_siginfo 结构,它具有

uint32_t ssi_pid;     /* PID of sender */

也许这会对你有所帮助。

【讨论】:

以上是关于如何从信号中找出进程的 pid 在 linux 的 c++ 中启动?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Linux 中判断哪个进程向我的进程发送了信号

linux中如何重启某一进程

如何捕获kill信号,优雅的结束multiprocessing所有进程

Linux下的进程与线程—— 信号

linux下变成——操作系统——信号

4-5 Linux 中断进程 --- kill (kill -2 实验)