2015-02-11 37 views
0

在我的linux系统中,我有一个很早就启动的启动守护进程。 引导期间的守护进程只是初始化g_dbus名称。 具体做法是:哪个进程发送SIGKILL

 guint id = g_bus_own_name (G_BUS_TYPE_SESSION, 
          DBUS_NAME, 
          G_BUS_NAME_OWNER_FLAGS_NONE, 
          bus_acquired_handler, 
          name_acquired_handler, 
          name_lost_handler, 
          NULL, 
          NULL); 

但我surprize我总是得到这样的:

 ##### deliver signal SIG : 9, [BT]<Process Name>#1(679) get_signal_to_deliver 
     ##### deliver signal SIG : 9, [BT]<Process Name>#2(681) get_signal_to_deliver 

我尝试这样做,以及:

 dmesg | grep -i 'killed process' 

但问题是,不知何故,dmesg的是空的。 (我认为这是有目的地完成的)

我也检查了我的进程中的全局&静态变量&没有我正在分配的大内存。此外,还没有内存泄漏

我的进程在系统中也具有root权限,所以这也不是问题。

最后一点。在系统(该守护程序)自动重新启动之后,完全没有问题。

有人可以帮助理解这种行为吗?以便我能够修复。

回答

0

我解决了我的问题。 虽然,我不是这方面的专家,但这里是我如何解决&,它给了我所发生事情的结论。

首先解决方案,然后我们会尝试推理。

检查系统总线是打开还是不:

  while(conn==NULL) { 
      dbus_bus_get(DBUS_BUS_SYSTEM,&err); 
      if(dbus_error_is_set(&err)){ 
       usleep(1000*50); 
       } 

是刚刚获得系统总线后:

guint id = g_bus_own_name (G_BUS_TYPE_SYSTEM, 
         DBUS_NAME, 
         G_BUS_NAME_OWNER_FLAGS_NONE, 
         bus_acquired_handler, 
         name_acquired_handler, 
         name_lost_handler, 
         NULL, 
         NULL);      

现在没有信号&守护工程进展顺利。

现在的原因。 我想,早些时候我试图获得会话总线,在启动时没有创建内核,因此内核向我的进程发送信号9。所以,我转到了系统总线,这比会话总线早发射。此外,在获得系统总线之前,其相关的确保即使system_bus启动&因此也是解决方案。

要回答哪个过程发送sigkill,在我看来,没有特别的过程。它来自内核本身。

希望这对其他人也有用。