Concurrency 如何检查应用程序是否处于等待状态

Concurrency 如何检查应用程序是否处于等待状态,concurrency,Concurrency,我有两个应用程序在我的机器上运行。一个应该交作业,另一个应该做作业。如何确保第一个应用程序/进程处于等待状态。我可以通过其消耗的资源进行验证,但这并不保证。我应该使用什么工具?您可以使用命名管道-第一个应用程序将从中读取,但它将为空,因此它将继续等待(被阻止)。第二个应用程序将在希望第一个应用程序继续时写入 您的两个应用程序应该进行通信。有很多方法可以做到这一点: 通过套接字发送消息。这样,如果使用普通网络套接字而不是本地套接字,则这两个进程可以在不同的计算机上运行 如果您使用的是C,那么就可

我有两个应用程序在我的机器上运行。一个应该交作业,另一个应该做作业。如何确保第一个应用程序/进程处于等待状态。我可以通过其消耗的资源进行验证,但这并不保证。我应该使用什么工具?

您可以使用命名管道-第一个应用程序将从中读取,但它将为空,因此它将继续等待(被阻止)。第二个应用程序将在希望第一个应用程序继续时写入

您的两个应用程序应该进行通信。有很多方法可以做到这一点:

  • 通过套接字发送消息。这样,如果使用普通网络套接字而不是本地套接字,则这两个进程可以在不同的计算机上运行
  • 如果您使用的是C,那么就可以将信号量与//一起使用。应该有其他语言的接口
  • 命名管道阻塞,直到读写操作都在进行。你可以用它来同步
  • 信号对这也有好处。在C语言中,它被称为/
  • 也可以使用,并具有variuos语言的绑定
更新:如果您无法修改处理应用程序,那么就更难了。你必须依靠一些指示进展的迹象。(我假设处理应用程序读取一个文件,进行一些处理,然后将结果写入输出文件。)您知道结果的最终大小吗?如果是这样,您需要反复检查大小(或在大小更改时)


如果您不知道尺寸,但知道加工过程是如何进行的,您可以使用它。例如,处理在输出文件关闭时完成。您可以使用strace查看所有系统调用,包括close。您可以使用环境变量替换close()函数(在windows上,您必须这样做)。通过这种方式,您可以在某种程度上修改处理程序,而无需实际重新编译,甚至无需访问其源代码。

任何东西都不能保证您的应用程序处于等待状态。你必须通过一些工作并得到回复。它可能是事务,也可能不是事务-应用程序可以确认它在开始处理消息之前或在处理消息之后(成功与否)获得了要处理的消息。如果不等待,通过一项工作应该失败。无论是在尝试写入TCP/IP套接字或其他方式时,还是在发生超时时。这取决于实现、您使用的传输类型和其他要求

实际上,有一种方法可以确定进程(线程)是否处于阻塞状态并等待套接字(或其他源)上的数据,但这意味着客户端应该位于同一台计算机上,并具有执行此操作所需的访问权限,但这除了调试之外没有任何意义,您可以使用任何调试器进行调试


总的来说,确保应用程序在试图传递数据之前等待数据的想法是,数据闻起来很糟糕。更不用说赛车状况了-如果您检查过,结果正常,并且当您实际尝试发送数据时,发现应用程序当时没有等待(即使是微秒)。

我很抱歉。我忘了提到我不是在开发这个应用程序,只是在测试它。我知道调试是一种方法,但我想知道是否有像procexplorer之类的工具可以在这种情况下提供帮助。我不认为有一种方法可以一直工作。我在回答中添加了一些可能性,但它们可能不适用于您的情况。