mauser
Goto Top

Programm starten und von genau diesem die PID auslesen?

Hallo an alle.

Ich hab das Forum durchforstet, aber irgendwie find ich nicht die Lösung, die ich suche oder ich schnall die einfach nicht.
@echo off

:1

 C:\PFAD_ZU_PHP/php -f daemon.php -- -configdir "config" -logdir "log"  

 goto 1

Das Programm was hier gestartet wird lautet als Prozess: "php.exe"
Das ist bei mir aber mehrfach gestartet. Deshalb benötige ich die PID von der besagten php.exe.

Frage:

Kann ich irgendwie den oberen Batch-Quellcode so umbauen, dass mir die Batchdatei bei Start die PID in eine Datei reinschreibt?

Ich dachte mir das so:
@echo off

:1
set file=C:\Program\file.txt
if exists %file% del %file%
if not exists %file% makefile %file%

 C:\PFAD_ZU_PHP/php -f daemon.php -- -configdir "config" -logdir "log" >> PID %file%  


 goto 1

Kann das funktionieren?

Content-Key: 165752

Url: https://administrator.de/contentid/165752

Printed on: May 1, 2024 at 20:05 o'clock

Mitglied: 60730
60730 May 05, 2011 at 22:38:15 (UTC)
Goto Top
moin,

irgendwo solltest du einen Beitrag finden, der sich fast genau darum dreht.

Im Prinzip..

  • Nimm das gatesverdammte

back-to-top@echo off

raus..

Start "fenstertitel" php parameter usw.
  • und mit
Tasklist /FI ....
findest du die PID raus.

such mal - ich bin zu müde dafür.

Gruß
Member: Mauser
Mauser May 06, 2011 at 00:39:44 (UTC)
Goto Top
soweit bin ich ja schon. mit Tasklist PID´s rauszufinden ist ja kein Problem.
Doch dieses Fenster/Programm gibt es mehrfach. Alle mit gleichem Titel und der gleichen .EXE, Das einzige, worin sich diese unterscheiden,
ist die PID.

Also macht Tasklist doch nicht wirklich Sinn, oder doch?
Ich hab ja deshalb in meiner Frage geschrieben, dass ich genau diese PID von diesem gestarteten Fenster brauch.
Member: Friemler
Friemler May 06, 2011 at 01:34:11 (UTC)
Goto Top
Hallo Mauser,

hier mal ein Vorschlag von mir:

@echo off

setlocal

set "ProgPath=abc"  
set "Prog=xyz.exe"  

for /f "delims=" %%l in ('for /f "skip=3 tokens=2" %%p in ^('tasklist /fi "imagename eq %Prog%"'^) do @^<NUL set /p "=%%p "') do (  
  set "PIDs=%%l"  
)

start "%Prog%" "%ProgPath%\%Prog%"  

for /f "skip=3 tokens=2" %%p in ('tasklist /fi "imagename eq %Prog%"') do (  
  echo %PIDs% | find "%%p" > NUL || if not defined NewPID set "NewPID=%%p"  
)

if defined NewPID echo Neue Instanz: %NewPID%

Die erste FOR-Schleife erstellt eine Liste der PIDs aller z.Z. laufenden Instanzen des Programms. Dann wird in Zeile 12 das Programm gestartet. Die zweite FOR-Schleife ermittelt wieder die PIDs aller laufenden Instanzen des Programms und sucht jede von ihnen in der Liste, die die erste Schleife erstellt hat. Wenn die aktuell betrachtete PID darin nicht gefunden wird und die Variable NewPID noch keinen Wert hat, wird NewPID auf diesen Wert gesetzt. Wenn diese Variable zum Schluss einen Wert hat, wird er in Zeile 18 ausgegeben.

Das Programm muss in Zeile 12 mit dem Befehl START gestartet werden, da CMD sonst auf die Beendigung des Programms wartet.

Die erste FOR-Schleife besteht aus zwei geschachtelten Schleifen um ENABLEDELAYEDEXPANSION zu vermeiden.

Gruß
Friemler


[EDIT]
Code geändert:
  • Bugfix: In Zeile 8 @ vor ^<NUL ergänzt, sonst enthält die Liste nur ein Element
  • In Zeile 15 if not defined NewPID ergänzt, damit das Script auch funktioniert, wenn das zu startende Programm CMD.exe ist.
[/EDIT]