【问题标题】:Windows equivalent for Linux "screen" or another alternative?Windows 等效于 Linux“屏幕”或其他替代方案?
【发布时间】:2011-02-19 15:11:16
【问题描述】:

我正在寻找一种在 Windows 环境中控制程序的方法。

我希望它有点类似于 Linux 软件“screen”。

我搜索的原因是我需要启动一个带有标识符的程序(在 Windows 上),因此我稍后可以关闭该特定程序,而无需关闭任何其他程序 - 即使实际程序(.exe 文件) 运行多次。那么无论如何我可以“命名”它吗?

我现在在 Linux 上使用以下内容:

$ screen <params> <id> ./softwareprogram

然后我知道我总能用它的 ID 找到它 :)

这是一个正在关闭或启动第 3 方程序的外部程序。

我的程序是用 C++ 编写的,如果这有什么不同的话。

编辑:我不能自己选择ID吗?喜欢以特定名称启动程序?另外如何通过提供名称来终止进程?

【问题讨论】:

  • @Christian 和@CodeInChaos;这似乎很复杂。此外,如果我使用 CreateProcess 函数启动它,当我关闭我的程序(或崩溃)时,启动的程序是否会死机。 @Christian 我想自己指定一个名字。我正在开发的程序没有名字,所以很难知道谁是谁。该名称来自具有自己数据库的外国机器的 TCP 连接(数据库对我的程序不可用)。所以它基本上像“stop:program588”一样发送,然后我希望我的程序停止 id 为“program588”的程序。这个功能很容易获得

标签: windows linux gnu-screen


【解决方案1】:

目前,我不相信有原生的屏幕等价物。 Cygwin 包含 screen 的实现,但它带有 cygwin 的开销。问题是基于 Windows 和 Posix 的操作系统以非常不同的方式实现控制台。 Windows 不支持 POSIX 环境中的许多 tty 功能。话虽如此,可以使用 API 调用在屏幕实用程序中编写功能的最小实现:AttachConsoleFreeConsole。不过,我必须对这个主题做更多的研究。

【讨论】:

    【解决方案2】:

    当你启动程序时,你可以得到它的进程 ID,即使在 Windows 上也是如此。 您可以稍后使用该进程 ID 再次终止该程序。

    如果你需要给它你自己的 id,那么你可以使用例如用于存储您的 id 到进程 id 的映射的注册表。如果您收到启动命令,请将注册表中的标识符作为键存储,将启动进程的 pid 作为值存储。如果您收到停止命令,请从注册表中检索 pid 并终止该 pid 并从注册表中删除该键。

    您当然也可以使用数据库或文件夹来代替注册表,其中密钥(您的标识符)是文件名,pid 在每个文件中

    【讨论】:

    • 最好使用句柄 - 进程 ID 可以重复使用,而句柄永远不会被重复使用,除非您关闭它。并且不要将甚至不需要重新启动的数据放入注册表ಠ_ಠ
    【解决方案3】:

    虽然我不知道 linux screen 命令的作用,但您为什么不直接使用从 CreateProcess 获得的进程句柄?

    您也获得了进程 ID,但它仅在该进程有打开的句柄时才有效。

    lpProcessInformation 参数将包含进程 ID 和进程句柄。

    【讨论】:

    • 这可能是您现在可以在带有 PowerShell 的 Windows 中本机执行的最佳选择,感谢您让我有点头疼。
    猜你喜欢
    • 2011-07-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-31
    • 1970-01-01
    • 2011-09-01
    • 2012-12-27
    • 2014-07-08
    相关资源
    最近更新 更多