【发布时间】:2016-07-11 08:58:30
【问题描述】:
我有一个创建很多进程的进程,我想识别(获取 pid)其中一个孩子。遍历孩子会占用大量资源(不要问为什么)。所以我试图通过(以某种方式)识别它是否使用sd_notify 并获取pid(如果可能的话,我现在不知道)来获取进程的pid。我正在使用 ubuntu 14.04 并创建了一个小测试程序:
#include <systemd/sd-daemon.h>
#include <stdio.h>
int main()
{
int a;
a = sd_notify(0, "READY=1");
printf("%d -> \n", a);
fflush(stdout);
}
但它让我说undefined reference to 'sd_notify' 时出错。
附言
我发现sd_notify 是针对 systemd 系统的。在新贵系统中,这相当于什么?或者如何确保我正在搜索的进程不使用此功能?或者是否可以使用sd_notify 记录进程发送的所有消息?
【问题讨论】:
-
看起来有点像 [XY 问题] (meta.stackexchange.com/questions/66377/what-is-the-xy-problem) - 为什么你相信你能够识别一个进程仅仅因为它使用了
sd_notify?为什么你需要得到这个特定孩子的 PID? -
我实际上正在尝试的是,我以用户 A 身份登录,以用户 B 身份创建进程,并且该进程为用户 B 创建会话,(
/etc/X11/Xsession 'gnome-session --session=ubuntu')我正在尝试从用户 B 的会话进程中获取 dbus 连接名称(来自 dbus-daemon --session)并注销用户。 -
好的,那么这就是你应该问的问题。 :) (并且添加了很多细节,因为还有很多事情仍然不清楚您正在做的事情的局限性。为什么不使用标准的 DBus API - systemd 或 consolekit - 来定位会话?)跨度>
-
我正在尝试让我的程序在每个发行版(systemd,upstart init)上运行。我还没有尝试使用任何 API。所以你认为这种方法不会帮助我识别pid?
-
或者您能否提供我如何获取 pid 或使用
Consolekit注销其他用户?
标签: c++ linux ubuntu notifications