哪个进程正在发送 SIGKILL
which process is sending SIGKILL
在我的 linux 系统中,我有一个很早就启动的守护进程(在启动期间)。
启动期间的守护程序只是初始化 g_dbus 名称。
具体来说:
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(此守护进程的)自动重启两次或两次后,完全没有问题。
有人可以帮助理解这种行为吗?这样我就可以修复了。
我解决了我的问题。
虽然,我不是这方面的专家,但我是这样解决的,这让我得出了正在发生的事情的结论。
先解题,后推理。
检查系统总线是否up:
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,在我看来,没有特定的进程。它来自内核本身。
希望这对其他人也有用。
在我的 linux 系统中,我有一个很早就启动的守护进程(在启动期间)。 启动期间的守护程序只是初始化 g_dbus 名称。 具体来说:
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(此守护进程的)自动重启两次或两次后,完全没有问题。
有人可以帮助理解这种行为吗?这样我就可以修复了。
我解决了我的问题。 虽然,我不是这方面的专家,但我是这样解决的,这让我得出了正在发生的事情的结论。
先解题,后推理。
检查系统总线是否up:
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,在我看来,没有特定的进程。它来自内核本身。
希望这对其他人也有用。