Windows cmd .bat — запуск дочернего процесса, который запускается одновременно с родительским и закрывается, когда родитель делает

Так что это может быть невозможно, но я все равно спрошу

У меня есть сценарий журнала .bat, предназначенный для сбора информации и времени использования приложения. Итак, что мне нужно, это пакетный файл, который запрашивает у пользователя некоторую базовую информацию, запускает дочерний процесс или файл .bat, который позволяет пользователю вводить дополнительную информацию, в то время как родительский процесс запускается и ожидает приложение Windows (например, блокнот. EXE). Затем я хочу, чтобы родительский и дочерний процессы завершались после закрытия notepad.exe пользователем.

Обычно это то, что у меня есть до сих пор;

@echo off

set someinfo=
set /p someinfo="Enter Some Info Please: "
For /f "tokens=2-4 delims=/ " %%a in ('date /t') do (set mydate=%%b/%%a/%%c)
For /f "tokens=1-2 delims=/:" %%a in ("%TIME%") do (set mytime=%%a:%%b)

:: Starting time and info
echo %someinfo%,%mytime%,%mydate% >> C:\Temp\MSuser.log 

:: This would be the child process for additional input 
start "Additional info" addinfo.bat 

::This is the software I want to start
start /Wait "" "C:\Program Files (x86)\notepad.exe"


:: Once user exits software write log string and exit .bat file
For /f "tokens=2-4 delims=/ " %%a in ('date /t') do (set mydate=%%b/%%a/%%c)
For /f "tokens=1-2 delims=/:" %%a in ("%TIME%") do (set mytime=%%a:%%b) 

:: Ending time and info
echo %someinfo%,%mytime%,%mydate% >> C:\Temp\MSuser.log 

Проблема заключается в том, что когда дочерний процесс запускается "addinfo.bat", родительский процесс ожидает завершения дочернего процесса, прежде чем перейти к следующей строке кода (start /Wait "" "C:\Program Files (x86)\notepad.exe" )

Можно ли запустить дочерний процесс и продолжить родительский процесс одновременно? Кроме того, есть ли способ принудительно закрыть дочерний процесс перед выходом из родительского процесса, может быть, что-то вроде killpid?


person Mike Conley    schedule 13.06.2014    source источник


Ответы (1)


Это получит PID из вашего дочернего процесса и убьет его, когда родительский процесс завершится:

@echo off

set someinfo=
set /p someinfo="Enter Some Info Please: "
For /f "tokens=2-4 delims=/ " %%a in ('date /t') do (set mydate=%%b/%%a/%%c)
For /f "tokens=1-2 delims=/:" %%a in ("%TIME%") do (set mytime=%%a:%%b)

:: Starting time and info
echo %someinfo%,%mytime%,%mydate% >> C:\Temp\MSuser.log 

:: This would be the child process for additional input 
start "Additional info" adinfo.bat

::This is the software I want to start
start /Wait "" "notepad.exe"

:: Once user exits software write log string and exit .bat file
For /f "tokens=2-4 delims=/ " %%a in ('date /t') do (set mydate=%%b/%%a/%%c)
For /f "tokens=1-2 delims=/:" %%a in ("%TIME%") do (set mytime=%%a:%%b) 

:: Ending time and info
echo %someinfo%,%mytime%,%mydate% >> C:\Temp\MSuser.log

for /f "tokens=2 delims=," %%a in ('tasklist /v /fo csv ^| findstr /i "Additional info"') do set "$PID=%%a"
taskkill /PID %$PID%
person SachaDee    schedule 14.06.2014