2016-08-04 5 views
0

ich ein Verzeichnis haben, die enthält:Perl, .exe in einem anderen Fenster laufen und bekommen PID

  • script.pl
  • app.exe

In meinem Perl-Skript, ich will laufen app.exe die in einer anderen Schale wie folgt aus:

  • I laufen die script.pl
  • A schel l öffnen und Ausführen von Befehlen in dem Perl-Skript
  • Nach einer Weile laufen der Perl-Skript die app.exe (und erhalten die app.exe PID)
  • Eine neue Schalenöffnung und die app.exe auszuführen. In der gleichen Zeit, der Perl-Skript weiterhin seine Hinrichtung
  • Nach einer Weile stoppt der Perl-Skript die app.exe (mit PID)

Meine Fragen:

  1. Wie kann ich ausführen die app.exe in einem anderen Shell-Fenster in "Hintergrundmodus"? (Die Perl-Skript-Ausführung und app.exe sind 'parallel')
  2. Wie kann ich die PID meiner app.exe bekommen, wenn das Perl-Skript es ausführen?

Danke

+2

Unter Windows, ['$ pid = system (1, ...)'] (https://metacpan.org/pod/perlport#system). – mob

+0

Wenn ich das mache, bekomme ich die PID. Die app.exe wird jedoch in derselben Shell ausgeführt, in der ich das Perl-Skript ausgeführt habe. Ich möchte eine neue Shell öffnen, in der die app.exe ausgeführt wird. (Eine Shell für das Perl-Skript wird weiterhin ausgeführt und eine Shell für die app.exe wird ausgeführt.) – user2137454

+0

'system (1," START ... ")' – mob

Antwort

0

Ich bin neu mit Perl :) aber ich denke, dass Sie mit diesem lösen können.

Meine Antwort:

Frage 1: Sie können 2 Möglichkeiten testen.

Fall 1: Direkt mit Systembefehl:

System ("Start app.exe");

Fall 2: Erstellen Sie eine Batch-Datei nur mit dem Startbefehl und dann mit Perl ausführen.

launchAPP.bat


@echo off 
start app.exe 

Perl-Code:

system("launchAPP.bat"); 

Frage 2: Sie können auch 2 Möglichkeiten testen.

Abhängig von der Architektur Ihres Systems.

x32: Es gibt in CPAN eine Bibliothek, die mit Ihrem Code passt. Es verwendet Windows C-Bibliotheken zum Abrufen der Informationen.Hier

ist ein Link zu CPAN Bibliothek: Win32::Process::List

x64 oder x32:

können Sie wmic verwenden:

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

In Perl:

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

Es schafft eine Datei mit pid des Prozesses, den du extrahieren willst kann mit Perl einfach lesen.

Ich hoffe, das hilft.

Verwandte Themen