如何让我的linux服务触发我的信号
how can i make my linux service trigger my signal?
我用C++制作了我的第一个linux服务。
pid_t pid, sid;
pid = fork();
if (pid < 0) {
exit(EXIT_FAILURE);
}
if (pid>0) {
exit(EXIT_SUCCESS);
}
umask(0);
sid = setsid();
if (sid < 0) {
exit(EXIT_FAILURE);
}
if ((chdir("/")) < 0) {
exit(EXIT_FAILURE);
}
close(STDIN_FILENO);
close(STDOUT_FILENO);
close(STDERR_FILENO);
while (1) {
????????
//sleep(10);
}
exit(EXIT_SUCCESS);
它会做的是等待我的信号,当它收到信号时,它会做一些任务,然后再次等待我的下一个信号。
我会以某种方式从运行在同一台机器上的c++应用程序中发送信号(或其他什么)。看起来像是两个应用程序之间的信号机制。但在这种情况下,一个是linux服务,我不知道该服务如何等待我的信号。
我怎样才能做到这一点?我的备选方案是什么?
谢谢。
注意:"信号"一词引起混淆。从技术上讲,我不打算用这个词。我只是想说,我需要从我的cpp应用程序中与我的linux服务对话。
注意2:使用signal是没有用的,因为在它的处理程序中,几乎做任何事情都是不安全的,而我需要做很多事情。(我不知道我是否可以启动一个线程,至少!)
这里是一个处理SIGHUP和SIGTERM的处理程序的例子,您的程序可以使用kill -9 processid
或kill -HUP processid
发送这些信号当然还有一些其他信号可以用于此目的检查man signal
void handler (int signal_number){
//action
exit(1);
}
在主程序中
struct sigaction act;
struct sigaction act2;
memset (&act, 0, sizeof (act));
memset (&act2, 0, sizeof (act2));
act.sa_handler = handler;
act2.sa_handler = handler;
if (sigaction (SIGHUP, &act, NULL) < 0) {
perror ("sigaction");
}
if (sigaction (SIGTERM, &act, NULL) < 0) {
perror ("sigaction");
}
//wait here for ever or do something.
终于找到了合适的关键词来搜索我需要知道的内容。以下是不同进程之间通信的替代方式:
http://www.tldp.org/LDP/lpg/node7.html
相关文章:
- 代码在我的计算机上运行良好,但是在将其提交给coursera时遇到未知的信号11问题
- 为什么我的信号处理程序只执行一次?
- Metatrader 5 向导无法识别我的自定义交易信号模块
- 为什么事件队列未处理我的QT信号
- 代码在我的系统中运行良好,但 coursera 自动评分器给了我未知的信号
- 为什么我的工作人员线程未收到此信号
- 为什么我的数据无法在信号/插槽的表格之间传输
- 我是否过度设计了每个线程的信号阻塞
- 为什么我的信号槽比QThreadPool+new+delete慢
- 我有一个对象数组,我想发出一个包含这些对象中的一个的信号。但信号不能是指针
- 为什么我的连接没有触发信号功能
- 我的 Solaris 11 中未捕获第二个信号
- 我仍然需要从Qt5.5中的信号断开lambda吗?
- QT C++ - 信号和插槽:"No such slot QLabel..."甚至插槽功能也存在于我的类中
- 我如何接收到QNAM开始在Qt中下载网页的信号?
- 为什么我的信号不触发没有Qt::D irectConnection的插槽?
- 为什么 SIGSEGV 的信号处理程序没有捕获我的C++抛出异常?
- 我的QThread完成了,但我无法得到信号
- 如何让我的linux服务触发我的信号
- 为什么我的信号处理程序(引发异常)不会多次触发?