【问题标题】:How to terminate an application based on file existence check in Tcl on Linux environment如何在 Linux 环境中基于 Tcl 中的文件存在检查终止应用程序
【发布时间】:2014-03-20 21:18:11
【问题描述】:

我运行 T-Plan 机器人,它连接到我的 Windows 机器并执行一些脚本。 成功执行脚本后,我通过 pscp 将生成的 xml 文件导出到我的 linux 机器。

T-paln 机器人充当第 3 方免费软件,通过 Windows 机器上的 cmd 传递一些命令。 这是通过在 t-plan 机器人上运行一个简单的批处理文件来实现的。但是,向 Windows 发送命令的脚本会根据一些明确声明的超时秒数断开自己的连接。

我想写一个 tcl 代码在 linux 机器上启动这个应用程序,一旦命令生成成功的结果作为 xml 文件并在 linux 机器上接收,它应该检查 xml 文件是否存在于指定目录并终止那个时候的应用程序。我想要这个,因为下一个代码部分将解析这个收到的 xml 报告并执行其他操作。

我认为 tcl 中应该有一些类可以杀死任何环境中的进程/服务,这里我需要在 linux 中执行。

真诚等待回复。在此先感谢

【问题讨论】:

  • 您的问题相当混乱。你应该尝试将你的整体任务分解成更小的部分,你要么知道该怎么做,要么可以明确地询问。并不是我们不能帮助您获得整体解决方案,而是我们希望您的问题和我们的答案也对其他人有用。
  • 感谢@DonalFellows 的快速回复。好的,我只解释我觉得真正挑战的部分。我基本上有两个用 tcl 编写的代码块。第一个简单地使用一个 proc连接到 windows 机器,这将启动一个客户端软件(T-plan 机器人),它传递 windows 机器的 IP。现在下一个代码块解析一个在运行时收到的 xml 文件。但这一切都是在 T-plan 完成的机器人仍在运行。我想在触摸解析代码块之前收到来自 Windows 的文件后立即终止该进程。

标签: linux tcl vnc-server


【解决方案1】:

要杀死同一台 Linux 机器上的进程,前提是您有这样做的权限(即,您以同一用户身份运行),您可以执行以下任一操作:

package require Tclx
kill $processId

或者:

exec kill $processId

(前者不需要外部命令——它直接进行系统调用——但第二个不需要Tclx pacakge。)

这两个都需要进程 ID。

要测试文件是否存在,请像这样使用file exists:

if {[file exists $theFilename]} {
    puts "Woohoo! $theFilename is there!"
}

要杀死远程机器上的某些东西,您需要向该机器发送一个运行命令。也许像:

exec ssh $remoteMachine kill $remotePID

获取$remotePID 可能“很有趣”,并且可能需要在您的整个系统设计中进行一些深思熟虑。如果从 Windows 调用到 Linux,请将 ssh 替换为 plink。如果反过来,你正在谈论做:

exec ssh $remoteMachine taskkill /PID $remotePID

这可能会变得非常复杂,我不确定您现在采用的方法是否正确。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-02-22
    • 2012-01-27
    • 1970-01-01
    • 1970-01-01
    • 2013-01-18
    • 2019-07-22
    • 2018-03-06
    相关资源
    最近更新 更多