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.
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:
Kann das funktionieren?
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?
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 165752
Url: https://administrator.de/forum/programm-starten-und-von-genau-diesem-die-pid-auslesen-165752.html
Ausgedruckt am: 22.04.2025 um 22:04 Uhr
3 Kommentare
Neuester Kommentar
Hallo Mauser,
hier mal ein Vorschlag von mir:
Die erste
Das Programm muss in Zeile 12 mit dem Befehl
Die erste
Gruß
Friemler
[EDIT]
Code geändert:
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 ProgrammCMD.exe
ist.