守护进程不与notify-send交互

时间:2012-05-14 08:16:26

标签: c++ c linux ipc daemon

这是我的代码

#include <sys/types.h>
#include <sys/stat.h>
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <errno.h>
#include <unistd.h>
#include <syslog.h>
#include <string.h>
#include <iostream>

int main(int argc, char *argv[]) {
    pid_t pid, sid;
    int sec = 10;

    pid = fork();
    if (pid < 0) {
        perror("fork");
        exit(EXIT_FAILURE);
    }
    if (pid > 0) {
        std::cout << "Running with PID: " << pid << std::endl;      
        exit(EXIT_SUCCESS);
    }
    umask(0);        

    sid = setsid();
    if (sid < 0)
        exit(EXIT_FAILURE);

    if ((chdir("/")) < 0)
        exit(EXIT_FAILURE);    /* Log the failure */

    close(STDIN_FILENO);
    close(STDOUT_FILENO);
    close(STDERR_FILENO);

    while (1) {
        execl("/bin/notify-send", "notify-send", "-t", "3000", "Title", "body", NULL);
        sleep(sec); 
    }
    exit(EXIT_SUCCESS);
}

我希望它每10秒钟给一个notification。守护进程运行正常,但没有给出任何通知。

1 个答案:

答案 0 :(得分:1)

execl没有返回 - 它用新的程序替换正在运行的程序。因此,在sleep的循环中运行它是没有意义的 - 它只会运行一次。

我认为您应该使用system代替。它执行一个命令并返回。

替代是每次在循环中fork,让孩子做execl,而父母将继续循环。