Как мне сделать так, чтобы один командный процесс отправлял команду другому?

Ну конкретно пакетный скрипт. У меня есть тот, который запускает службу и запускает ее 24 часа в сутки 7 дней в неделю в окне командной строки.

Мне нужен пакетный сценарий для отправки команды «стоп» другому командному процессу.

Я поискал это в Интернете, но в этом нет ничего особенного и не выполняет то, что мне нужно.

user3901330

Ответов: 2

Ответы (2)

Возможно, можно использовать файл как индикатор того, что почти всегда выполняющийся командный процесс завершает сам себя.

Example code for nearly always running batch file AlwaysRunning.bat:

@echo off

rem The example code in a nearly endless running loop just prints
rem a message and then waits 3 seconds to simulate process time
rem of other commands. Then the batch file checks if the file
rem used to signal a wanted exit of this batch file exists.
rem The file is deleted and command process exits in this case.

title %~n0

:Endless
echo %TIME% %~0 is running.
%SystemRoot%\System32\ping.exe 127.0.0.1 -n 4 >nul
if exist "%TEMP%\ExitAlwaysRunning.tmp" (
    rem Other commands to execute before exit.
    del "%TEMP%\ExitAlwaysRunning.tmp"
    exit
)
goto Endless

Код для другого командного файла ExitRunning.bat сигнализация с файлом ExitAlwaysRunning.tmp в каталоге для временных файлов командный файл AlwaysRunning.bat для выхода как можно скорее.

@echo off
rem Create in folder for temporary files an empty file as
rem indication for the always running batch task to exit.

copy NUL "%TEMP%\ExitAlwaysRunning.tmp" >nul

rem Define a maximum time of 10 seconds waiting for exit
rem of the other command process signaled by file just
rem created not existing anymore because deleted by the
rem nearly always running command process immediately
rem before exiting.

set "Timeout=10"

rem Check once per second if the other command process
rem deleted the temporary file immediately before exiting.

:WaitForExit
%SystemRoot%\System32\ping.exe 127.0.0.1 -n 2 >nul
if not exist "%TEMP%\ExitAlwaysRunning.tmp" (
    echo.
    echo AlwaysRunning.bat deleted file and exited.
    goto ProcessExited
)
set /A Timeout-=1
if not %Timeout% == 0 (
    echo %Timeout% sec remaining on waiting for exit.
    goto WaitForExit
)

del "%TEMP%\ExitAlwaysRunning.tmp"
echo.
echo Command process processing AlwaysRunning.bat is either
echo not running or ignored the indication by file to exit.

rem Command tasklist could be used to find out if the other batch file
rem is still running and then taskkill could be used to kill the other
rem command process when not exiting within specified time. But this
rem should not happen if the initial timeout value is set correct.

:ProcessExited
rem Put here your other commands executed after nearly
rem always running command process terminated itself.

echo.
pause

Дважды щелкните или запустите сначала из окна командной строки AlwaysRunning.bat.

Затем запустите в другом окне командной строки или двойным щелчком ExitRunning.bat.

Если намерение состоит в том, чтобы остановить другую командную строку, почему бы просто не убить ее?

Taskkill может сделать это за вас. Например:

Taskkill /PID 2704 /F

2022 WebDevInsider