如何从信号中找出进程的 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) 与select
和read
的用法,因为最后一个将为您提供signalfd_siginfo
结构,它具有
uint32_t ssi_pid; /* PID of sender */
也许这会对你有所帮助。
【讨论】:
以上是关于如何从信号中找出进程的 pid 在 linux 的 c++ 中启动?的主要内容,如果未能解决你的问题,请参考以下文章