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

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

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

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

【问题讨论】:

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

标签: c++ linux signals fork ipc


【解决方案1】:

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

uint32_t ssi_pid;     /* PID of sender */

也许这会对你有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-12-17
    • 2011-07-14
    • 2021-05-14
    • 1970-01-01
    • 2013-07-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多