2015-02-11 2 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); 

Но, к моему удивлению, я всегда получаю это:

 ##### 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 в системе, так что это тоже не проблема.

Последний пункт. после двух или нет автоматических перезапусков с systemd (этого демона) нет никакой проблемы вообще.

Может кто-нибудь помочь понять это поведение? так что я могу исправить.

ответ

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, мне кажется, что в частности нет процесса. Он шел из самого ядра.

Надеюсь, это полезно и для кого-то еще.