我和谷哥有个约会 2013-10-29 13:03 采纳率: 0%
浏览 1037

内核发送自定义信号应用没有响应..求帮忙.在线等..(折腾两天了)

  • 写回答

1条回答 默认 最新

  • 你知我知皆知 2024-08-01 13:23
    关注

    以下回答参考 皆我百晓生券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。

    这个问题是关于Linux内核的,如果你正在寻找有关如何在Linux内核中发送和接收自定义信号的方法,请参阅以下步骤:

    1. 在你的程序中创建一个信号处理函数。这个函数应该能够接受信号,并且返回一个特定的结果。

    2. 通过调用signal()函数将信号传递给进程。你可以使用SIGINT, SIGHUP, SIGTERM, 或者其他信号来指定你想要的行为。

    例如,如果你想在用户按下Ctrl+C时终止进程,你可以这样做:

    #include <sys/socket.h>
    #include <sys/un.h>
    
    int main() {
        int sockfd = socket(AF_UNIX, SOCK_STREAM, 0);
        if (sockfd < 0) {
            perror("socket");
            exit(EXIT_FAILURE);
        }
    
        struct sockaddr_un addr;
        memset(&addr, '\0', sizeof(addr));
        addr.sun_family = AF_UNIX;
    
        char path[PATH_MAX];
        strcpy(path, "/tmp/termination");
    
        if (bind(sockfd, (struct sockaddr *)&addr, sizeof(addr)) == -1) {
            perror("bind");
            close(sockfd);
            exit(EXIT_FAILURE);
        }
    
        if (listen(sockfd, 1) == -1) {
            perror("listen");
            close(sockfd);
            exit(EXIT_FAILURE);
        }
    
        while (true) {
            struct sockaddr_un client_addr;
            socklen_t addrlen = sizeof(client_addr);
    
            if ((sockfd = accept(sockfd, (struct sockaddr *)&client_addr, &addrlen)) < 0) {
                perror("accept");
                continue;
            }
    
            send(sockfd, "Terminated", strlen("Terminated"), 0);
    
            close(sockfd);
        }
    }
    

    这个程序将在用户按下Ctrl+C时发送"Terminated"字符串到服务器端。

    请注意,这只是一个基本示例,实际的应用可能会更复杂,包括错误检查、异常处理、以及与用户的交互。

    评论

报告相同问题?