【问题标题】:Is it possible to pass "signals" to another console program?是否可以将“信号”传递给另一个控制台程序?
【发布时间】:2013-12-27 16:13:02
【问题描述】:

我的目标:我想将一个信号(int 型变量)传递给另一个正在运行的控制台程序。

我的想法:将数据写入磁盘,由其他控制台程序读取数据。

可能的缺陷:速度太慢,效率不高。

是否能够将“(自定义/int-type)信号”传递给另一个控制台程序?

任何建议(或更好的解决方法)将不胜感激。

【问题讨论】:

标签: c windows gcc


【解决方案1】:

是的……

选项 1:使用SendMessage() 向其他进程的消息队列发送消息。 (可能不合适,因为你说你有一个控制台程序,它可能没有消息队列。)

选项 2:使用named shared memory

选项 3:在两个进程之间使用 a named pipe

选项 4:在两个进程之间使用a UDP or TCP network connection

选项 1 是最简单/最容易的,但要求目标进程有一个正在运行的消息队列来接收和处理消息。

【讨论】:

  • 嗯,我刚刚尝试了第一个,但是它比磁盘 I/O 慢一点(我的想法在上面列出)。 :-)
  • @KevinDongNaiJia 你试过哪一个?所有这些(可能除了网络连接)都应该明显比磁盘 I/O 快。
  • SendMessage()。也许我可以稍后尝试更大的数据。
  • 哦,是的!它比处理大数据的磁盘 I/O 快得多。谢谢。
【解决方案2】:

这取决于您实际希望在所涉及的进程之间传递什么。如果您需要做的只是通知其他进程,发生了某事(并且其他进程有办法在收到通知后立即了解详细信息),那么您可能需要named event

如果您需要分享更多信息,请考虑shared memory and mapped files

当然,你也可以考虑走COM路线。为进程定义一个接口,它应该接收“信号”并让它在global object table 中注册一个对象。发送进程可以从对象表中获取实例,并使用接口进行通知。

可能还有无数其他方式。

【讨论】:

    【解决方案3】:

    我认为我们也可以使用 kill 将任何信号传递给 linux 中的任何应用程序。只需查看“man kill”,例如将 SIGKILL 发送到 keil,我们可以这样写 ..

    杀死 -9 keil

    通过使用 kill -l 我们可以看到所有信号及其各自的编号。并像这样传递他们的'kill -n app_name'

    【讨论】:

    • 不适合windows。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-15
    • 2021-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-08
    相关资源
    最近更新 更多