首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >C:停止执行,在接收信号时跳到程序中的特定点。

C:停止执行,在接收信号时跳到程序中的特定点。
EN

Stack Overflow用户
提问于 2016-12-20 22:42:35
回答 1查看 117关注 0票数 2

我编写了一个代码,其中两个独立的程序(比如1和2)通过消息队列进行通信。每个程序发送特定mtype的消息,并等待特定mtype的响应。基于mtype函数调用。程序2最初在消息队列上等待select(),等待从程序1发起消息链,每次成功后,通过消息队列的通信链返回到select(),等待程序1发起下一个通信链。

我希望程序2必须返回到select(),在接收到来自程序1的特定信号(例如SIGUUSR1)时,它在通信链之间的任何位置停止执行,以防程序1发现当前链中的错误并希望重置,然后将启动一个新的通信链。

在接收到这个信号程序2时,从它在其中的所有函数返回并直接跳转到select()

我很遗憾没有分享代码片段,但我希望我已经说明了我的观点。

谢谢..。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-12-20 22:59:39

不如:

  • 当Program2启动时,它执行大部分初始化,然后分叉自己的一个副本。
  • 子进程创建套接字并连接到它,然后选择并正常运行。
  • 当子进程接收到SIGUSR1时,它以退出状态退出,指示需要重新启动。
  • 父进程只是等待子进程退出,如果退出状态指示需要重新启动,则分叉另一个子进程。(任何其他退出状态都会导致父级以相同状态退出)。

讨论:

  • 重新启动将非常慢(需要创建套接字等)。
  • 流程1需要知道消息队列在发送SIGUSR1时将断开连接。
  • 这应该是非常可靠的,并且可以跨Posix进行移植。
  • fork位实际上只是一个优化。您可以使父进程成为某种脚本--在这种情况下,模型甚至可以移植到Windows (显然脚本会有所不同,但程序2的源代码将是可移植的)。

唯一的另一种选择是设置某种标志,“频繁”地处理2次投票。如果设置了标志,则进程将抛出异常(C++)或longjmps (C)返回到select调用。该标志在信号处理程序中设置。

这种方法的问题是:( a)如果发生了什么事情阻止您轮询标志,它就会中断;( b)很难编写异常安全的代码,或者如果通过longjmp编写不泄漏资源的代码。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41256644

复制
相关文章
C# 程序在 Docker 中响应 Unix 信号
在 Docker Entry Script 详解中介绍了如何在 shell 脚本中响应 Unix 信号量来实现 Docker 应用优雅的关闭退出, 本文介绍 C# 程序如何在 Docker 中响应 Unix 信号实现优雅的关闭退出。
beginor
2020/08/10
1.6K0
使用Clang编译C程序在安卓设备中执行
在android-ndk-r19c目录下toolchains文件夹中的llvm文件夹即为clang编译工具包
乱码三千
2021/08/24
3.1K0
在eclipse中和命令行中执行接收args[]参数
首先是在cmd命令行中,比如test.java文件,javac test.java编译,
砖业洋__
2023/05/06
5450
在eclipse中和命令行中执行接收args[]参数
Qt编译错误:底层由于接收到操作系统的信号而停止indows
在Qt,写代码时,遇到内存泄漏,崩溃的问题。当时定位了很久,因为是偶尔出现,不稳定。后来发现了一些规律。需要规避,也没有想明白为什么为出现这个问题。
何其不顾四月天
2023/03/10
7970
CompletableFuture在超时后,能够停止执行吗?
因此,CompletableFuture的异步任务如果超时异常try掉了,是不会停止执行的
阿超
2022/11/22
2.8K0
CompletableFuture在超时后,能够停止执行吗?
python程序执行时间_用于在Python中查找程序执行时间的程序
The execution time of a program is defined as the time spent by the system to execute the task. As we all know any program takes some execution time but we don't know how much. So, don't worry, in this tutorial we will learn it by using the datetime module and also we will see the execution time for finding the factorial of a large number. A large number will be provided by the user and we have to calculate the factorial of a number, also we have to find the execution time of the factorial program. Before going to write the Python program, we will try to understand the algorithm.
用户7886150
2021/01/28
2K0
IOS开发中滑动页面时NSTimer停止的问题
我们在做倒计时的时候,发现当你手指按着屏幕不放,拖动tableView滑动的时候,写在cell上得倒计时停止倒计时,松开继续倒计时。研究发现就是拖动tableView滑动时,NSTimer停止了。 这其实就是runloop的mode在做怪。 runloop可以理解为cocoa下的一种消息循环机制,用来处理各种消息事件,我们在开发 的时候并不需要手动去创建一个runloop,因为框架为我们创建了一个默认的runloop,通过[NSRunloop currentRunloop]我们可以得到一个当前线程下面对应
王大锤
2018/05/17
1.8K0
在idea中maven项目jdk编译version总是跳到1.5
bug描述 项目ide: idea 项目构建工具:maven bug现象:每次修改pom之后,idea自动扫描一遍,然后发现默认的compile级别跳到5.0. 每次手动去setting里修改compile很费事。 解决方案 猜测是maven中没有指定jdk,所以才会扫描为默认的jdk版本。 于是,添加maven-compile-plugin: <plugin> <artifactId>maven-compiler-plugin</artifac
Ryan-Miao
2018/03/13
1.2K0
信号与系统实验一 信号在MATLAB中的表示
 3.用下列函数各画一图,参数自定。 sinc,rectpuls,square,tripuls,sawtooth
timerring
2022/07/20
1.3K0
信号与系统实验一 信号在MATLAB中的表示
Python 在信号处理中的优势
本篇是对Pylab的小试牛刀,也是对许多其他主题的过渡——包括《编码速度估计的长时间等待的后果》。
用户3412318
2019/01/02
2.8K0
.c中变量必须定义在执行语句前面
int main() { int a =1;     a = 2;     int b = 3;
saintyyu
2021/11/22
1.9K0
.c中变量必须定义在执行语句前面
传感器信号接收模块
还是很开心的一天,调试了好久的程序终于顺利运行,也算是从手机app软件的使用者向开发者迈出了那么一小步~;一直以来,想要构件一个小的生态:技术能够带来利润,利润又能够反哺技术,进而实现可持续发展;近来以智能传感作为一个切入点,对链条上涉及的各个环节进行学习、归纳和总结,希望能够实现技术相对闭环;
联远智维
2022/01/20
3940
传感器信号接收模块
蓝牙信号接收模块—虚拟示波器
很是开心的一天,沉下心来,和同学一起编写调试了蓝牙信号接收模块—虚拟示波器,实现了数据接收、保存以及可视化等功能,具体如下所示;在这个过程中,结实了优秀的小伙伴,号称获得过物联网比赛一等奖(湖北赛区),另外远程与同学合作默契,项目推进快速高效,回顾这两周的时光,第一感觉是感谢~最后,香港大学田师兄对蓝牙数据接收模块进行了测试,后期将依据反馈问题进行优化更改~
联远智维
2022/01/20
9710
蓝牙信号接收模块—虚拟示波器
在 Docker 容器中捕获信号
我们可能都使用过 docker stop 命令来停止正在运行的容器,有时可能会使用 docker kill 命令强行关闭容器或者把某个信号传递给容器中的进程。这些操作的本质都是通过从主机向容器发送信号实现主机与容器中程序的交互。比如我们可以向容器中的应用发送一个重新加载信号,容器中的应用程序在接到信号后执行相应的处理程序完成重新加载配置文件的任务。本文将介绍在 docker 容器中捕获信号的基本知识。
星哥玩云
2022/07/19
2.7K0
在 Docker 容器中捕获信号
在FPGA中,同步信号、异步信号和亚稳态的理解
叁芯智能科技-郝旭帅团队打造“FPGA 设计与研发”学习系列, 可以让设计者从“小白”到“入门”再到“精通”。本系列从基础的数字电路为起点,避免学习者“腾空造楼”;中间讲解各类基础外设驱动,保证设计能力逐步加深;后期讲解 FPGA 设计理论和复杂外设、协议驱动实现,确保与现实企业研发对接。
FPGA技术江湖
2020/12/30
9290
WordPress 搜索结果中只有1个文章时自动跳到该文章方法
WordPress 搜索结果中只有1个文章时自动跳到该文章的方法。当访问者通过WordPress自带的搜索查找文章时,如果返回的结果只有一篇文章,可以直接跳转到这篇文章,从而提高用户体验。
主机教程网2bcd.com
2022/10/26
2700
页面切换时为什么会自动跳到recyclerView的位置?
页面切换时RecyclerView获得了焦点,RecyclerView的 focusableOnTouchMode属性默认是true,所以页面切换时RecyclerView自动获得焦点就滚动到头部。抢焦点的问题。
yechaoa
2022/06/10
6140
trap - 在脚本中处理信号
  比如,按Ctrl+C会使脚本终止执行,实际上系统发送了SIGINT信号给脚本进程,SIGINT信号的默认处理方式就是退出程序。如果要在Ctrl+C不退出程序,那么就得使用trap命令来指定一下SIGINT的处理方式了。
yaohong
2019/09/11
1.6K0
windows moblie 5.0在托管程序中实现短信接收和拦截
该文介绍了如何在Windows Mobile 5.0下使用.NET Compact Framework实现短信的接收和拦截,包括安装Windows Mobile 5.0 Pocket PC SDK、开发工具Visual Studio 2005、安装实例程序以及编写代码实现拦截短信功能。
Jianbo
2018/01/02
1.7K0
SORT命令在Redis中的实现以及多个选项时的执行顺序
SORT命令在Redis中实现了对存储在列表、集合、有序集合数据类型的元素进行排序的功能。
一凡sir
2023/10/05
6130
SORT命令在Redis中的实现以及多个选项时的执行顺序

相似问题

程序接收信号sigtstp停止(用户)

21

使用c中的信号并从程序中的特定点恢复

20

C程序在分配变量时停止执行。

22

接收信号时停止gdb同时循环

20

在QML中接收C++信号

12
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文