【问题标题】:Perl, run .exe in another window and get PIDPerl,在另一个窗口中运行 .exe 并获取 PID
【发布时间】:2016-08-04 00:17:24
【问题描述】:

我有一个目录,其中包含:

  • script.pl
  • app.exe

在我的 perl 脚本中,我想在另一个 shell 中运行 app.exe,如下所示:

  • 我运行 script.pl
  • shell 打开并在 perl 脚本中执行命令
  • 一段时间后,perl 脚本运行 app.exe(并获取 app.exe PID)
  • 打开一个新的 shell 并执行 app.exe。同时,perl 脚本继续执行
  • 一段时间后,perl 脚本会停止 app.exe(带有 PID)

我的问题:

  1. 如何在“后台模式”下在另一个 shell 窗口中执行 app.exe? (perl 脚本执行和 app.exe 是“并行的”)
  2. perl 脚本执行时如何获取 app.exe 的 PID?

谢谢你:)

【问题讨论】:

  • 在 Windows 上,$pid=system(1,...)
  • 当我这样做时,我得到了 pid。但是,app.exe 在我运行 perl 脚本的同一个 shell 上运行。我想打开一个执行 app.exe 的新 shell。 (perl脚本的一个shell继续执行,app.exe的一个shell执行)
  • system(1,"START ...")

标签: windows perl parallel-processing


【解决方案1】:

我是 perl 的新手,但我认为你可以解决这个问题。

我的回答:

问题 1:您可以测试 2 种方式。

案例一:直接用系统命令:

system("启动 app.exe");

案例 2: 只需使用启动命令创建一个批处理文件,然后使用 perl 执行。

启动APP.bat


@echo off
start app.exe

Perl 代码:

system("launchAPP.bat");

问题 2:您也可以测试 2 种方式。

取决于您的系统架构。

x32: CPAN 中有一个可以适合您的代码的库。它使用 windows C 库来检索信息。

这是 CPAN 库的链接: Win32::Process::List

x64 或 x32:

你可以使用 wmic:

wmic process where (Name like '%%app.exe%%' and CommandLine like '%%example%%') get ProcessId | more >> pid.txt

在 perl 中:

system(wmic process where (Name like '%%app.exe%%' and CommandLine like '%%example%%') get ProcessId | more >> pid.txt);

它创建一个文件,其中包含您要提取的进程的 pid,您可以使用 perl 轻松读取。

我希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-05-23
    • 1970-01-01
    • 2015-09-30
    • 1970-01-01
    • 1970-01-01
    • 2012-04-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多