一次结束C程序的多个实例?

时间:2016-11-10 20:36:21

标签: c linux terminal signals

我想知道一次退出多个C程序的最佳方法是什么?我在两个不同的终端(Linux)中运行相同的C程序,并且它们通过临时文本文件进行通信。当用户结束其中一个时,很可能使用CTRL-C,我希望它们都能立即结束。我已经读过,信号可以用来捕获用户中断程序,但是在另一个终端运行的程序如何知道何时结束?

概念性的解释是充足的,或者正确的方向是我所需要的。谢谢!

2 个答案:

答案 0 :(得分:0)

您可能正在使用线程从一个或多个远程访问接收外部连接。您的系统必须检查一个我们可以调用系统状态的公共点(通常我们使用一个单独的线程来维护系统状态,远程用户数量等信息,以及其他程序可以由此线程不断验证),无论如何,一次你有一个处理远程用户连接的线程,这个线程可以从辅助线程请求信息(系统状态),一旦任何线程请求系统状态线程杀死系统,这个开始通过杀死每个连接线程来断开所有用户。

我不确定自己是否清楚,无论如何,如果您需要更多解释,请让我更多地了解您的计划。

BR, Henrique Zenoni Machado

答案 1 :(得分:0)

管道或插座

我建议“正确”做的事情,就是停止通过文本文件“通信”,而是使用管道,FIFO文件或UNIX域套接字连接。在“进程间通信”(IPC)的章节中查看任何“POSIX编程简介”一书,其中应该至少有一个使用管道,FIFO文件或套接字执行此操作的示例; pipe上的手册页也可能为您提供一个良好的开端。然后,您可以检测到其他进程的断开连接并做出相应的反应。

信号处理

或者,你可以在每个进程中捕获SIGINT(信号:中断),并向文本文件写一些标志,告诉另一端在你的信号处理程序中终止。由于您使用的是C语言,因此可以直接参考signal的手册,了解注册信号处理程序的详细信息。

父/子

如果其中一个进程是另一个进程的父进程,您还可以通过SIGCHLD(Signal:Child Terminated)检测子进程的死亡,并使用wait系统调用之一(例如{ {1}})在终止自己之前收获它。虽然孩子可以监控自己的父进程ID以确定它是否已成为孤儿,但父母的死很难被发现。