i

Capturer le PID d'un processus lors de son lancement


source : https://stackoverflow.com/questions/1807794/how-to-capture-the-pid-of-a-process-when-launching-it-in-dos


script 1 :

@echo off

rem source https://stackoverflow.com/questions/1807794/how-to-capture-the-pid-of-a-process-when-launching-it-in-dos

rem there is a tab in the file at the end of the line below

rem The directory is set to the directory that the cmd file is located in

rem Change dir to alter that

rem  Modify cmd to change which command is run.


rem there is a tab in the file at the end of the line below

set tab=   

set cmd=javaw -jar lib\MyProg.jar

set dir=%~dp0


echo Starting MyProg

set pid=notfound


for /F "usebackq tokens=1,2 delims=;=%tab% " %%i in (

    `wmic process call create "%cmd%"^, "%dir%"`

) do (

    if %%j gtr 0 (

        set pid=%%j

    )

)


echo %pid% > MyProg.pid

pause

exit


rem If you want a stop.cmd that kills it, it would look like this

@echo off

for /F %%i in (%~dsp0MyProg.pid) do taskkill /F /PID %%i

del %~dsp0MyProg.pid


script 2 :


@echo off


call:AsyncCmd

rem call:AsyncCmd "echo hello world"

rem call:AsyncCmd "call build.bat"

exit /b


rem ------------------------------------------------------------------------------------------

rem Starts asynchronous command execution

rem %1 is command, if empty - only aborts existing build.

rem ------------------------------------------------------------------------------------------

:AsyncCmd

if exist %~dp0SetupBuild_Completed.txt (

    del /f %~dp0SetupBuild_Pid.txt >nul 2>&1

    del /f %~dp0SetupBuild_Completed.txt >nul 2>&1

)


if not exist %~dp0SetupBuild_Pid.txt goto lStartProc

    rem --------------------------------------------------

    rem Abort build process

    rem --------------------------------------------------

    set /p pid=<%~dp0SetupBuild_Pid.txt

    echo Cancelling setup build process, process id %pid%

    pskill -t %pid%

    del /f %~dp0SetupBuild_Pid.txt >nul 2>&1


:lStartProc

if "%~1" == "" exit /b 0


rem --------------------------------------------------

rem Starts asyncronous build process

rem --------------------------------------------------

set dir=%~dp0

set dir=%dir:~0,-1%

for /f "tokens=2 delims==; " %%a in ('wmic process call create "cmd /c mincon.exe && %~1 && echo 1>%~dp0SetupBuild_Completed.txt"^, "%dir%" ^| findstr /r "ProcessId"') do set pid=%%a

echo Setup build started, process id: %pid%

echo %pid%>%~dp0SetupBuild_Pid.txt

exit /b 0


script 3 (vbs) : voir