搬运...
貌似csdn比较有人气
http://bbs.chinaunix.net/forum.php?mod=viewthread&tid=4103573&extra=
内核发送自定义信号应用没有响应..求帮忙.在线等..(折腾两天了)
- 写回答
- 好问题 0 提建议
- 关注问题
- 邀请回答
-
1条回答 默认 最新
你知我知皆知 2024-08-01 13:23关注以下回答参考 皆我百晓生、券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。
这个问题是关于Linux内核的,如果你正在寻找有关如何在Linux内核中发送和接收自定义信号的方法,请参阅以下步骤:
-
在你的程序中创建一个信号处理函数。这个函数应该能够接受信号,并且返回一个特定的结果。
-
通过调用
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"字符串到服务器端。
请注意,这只是一个基本示例,实际的应用可能会更复杂,包括错误检查、异常处理、以及与用户的交互。
解决 无用评论 打赏 举报-