我在 zmq 中制作了一个客户端-服务器系统,它将帮助向登录到网络上所有计算机的人员发送大量通知。
客户端守护进程在所有不同的计算机上以 root 身份运行。但是,当消息发送到此类客户端并且调用“通知发送”时,该消息不会在用户桌面上弹出。我看到的错误是:
(通知发送:8670):GLib-GObject-CRITICAL **:g_object_unref:断言“G_IS_OBJECT(对象)”失败
我相信这是因为通知发送只能通过图形界面发送。或者通过在该特定用户下运行守护程序而不是作为 root 并设置 DISPLAY=:0
1)有没有办法发送通知,如notify-send或kdialog等,在root下运行客户端守护进程而不是用户本身?
2)还有其他方法可以更优雅地实现这一点吗?
3)并且,可以以任何方式使用 dbus 来做到这一点吗?
我有一个python celery-redis队列处理一次上传和下载值得一次演出和大量演出的数据。
很少有上传内容需要花费几个小时的时间。但是,一旦完成了这样的任务,我就目睹了这种奇怪的芹菜行为,即芹菜调度程序通过将其再次发送给工作人员(我正在运行一个工作人员)来重新运行刚刚完成的任务,并且它在同一时间发生了2次任务!
有人可以帮助我知道为什么会发生这种情况以及如何预防吗?
这些任务肯定干净地完成了,没有错误报告,因为这些任务运行时间非常长。
程序片段: -
if((fd = open(buf_serv, O_RDONLY)) < 0) {
char c[MAXLEN+1];
snprintf(c, sizeof(c), ": can't open, %s\n", strerror(errno));
n = strlen(c);
Run Code Online (Sandbox Code Playgroud)
...
gdb :-
102 if((fd = open(buf_serv, O_RDONLY)) < 0) {
(gdb) n
104 snprintf(c, sizeof(c), ": can't open, %s\n", strerror(errno));
(gdb) p sizeof(c)
$1 = 4097
(gdb) n
105 n = strlen(c);
(gdb) p strlen(c)
$2 = -1428323296
(gdb) n
...
Run Code Online (Sandbox Code Playgroud)
任何人都可以告诉我strlen如何返回负数?(用sigsegv信号撞击我的程序)
在此先感谢所有人!
(gdb) l
101
102 if((fd = open(buf_serv, O_RDONLY)) < 0) {
103 char ch[MAXLEN+1];
104 …Run Code Online (Sandbox Code Playgroud) python ×2
c ×1
celery ×1
celery-task ×1
dbus ×1
kde-plasma ×1
linux ×1
notify ×1
system ×1
unix ×1