【发布时间】:2013-12-27 16:13:02
【问题描述】:
我的目标:我想将一个信号(int 型变量)传递给另一个正在运行的控制台程序。
我的想法:将数据写入磁盘,由其他控制台程序读取数据。
可能的缺陷:速度太慢,效率不高。
是否能够将“(自定义/int-type)信号”传递给另一个控制台程序?
任何建议(或更好的解决方法)将不胜感激。
【问题讨论】:
我的目标:我想将一个信号(int 型变量)传递给另一个正在运行的控制台程序。
我的想法:将数据写入磁盘,由其他控制台程序读取数据。
可能的缺陷:速度太慢,效率不高。
是否能够将“(自定义/int-type)信号”传递给另一个控制台程序?
任何建议(或更好的解决方法)将不胜感激。
【问题讨论】:
是的……
选项 1:使用SendMessage() 向其他进程的消息队列发送消息。 (可能不合适,因为你说你有一个控制台程序,它可能没有消息队列。)
选项 2:使用named shared memory。
选项 3:在两个进程之间使用 a named pipe。
选项 4:在两个进程之间使用a UDP or TCP network connection。
选项 1 是最简单/最容易的,但要求目标进程有一个正在运行的消息队列来接收和处理消息。
【讨论】:
SendMessage()。也许我可以稍后尝试更大的数据。
这取决于您实际希望在所涉及的进程之间传递什么。如果您需要做的只是通知其他进程,发生了某事(并且其他进程有办法在收到通知后立即了解详细信息),那么您可能需要named event。
如果您需要分享更多信息,请考虑shared memory and mapped files。
当然,你也可以考虑走COM路线。为进程定义一个接口,它应该接收“信号”并让它在global object table 中注册一个对象。发送进程可以从对象表中获取实例,并使用接口进行通知。
可能还有无数其他方式。
【讨论】:
我认为我们也可以使用 kill 将任何信号传递给 linux 中的任何应用程序。只需查看“man kill”,例如将 SIGKILL 发送到 keil,我们可以这样写 ..
杀死 -9 keil
通过使用 kill -l 我们可以看到所有信号及其各自的编号。并像这样传递他们的'kill -n app_name'
【讨论】: