Windowsでコマンドラインプログラムの実行時間を制限するにはどうすればよいですか? Linuxで利用可能なタイムアウト/時間制限があることは知っていますが、Windows用の同様のユーティリティを見つけることができませんでした。
start yourprogram.exe
ping 127.0.0.1 -n 10
taskkill /im yourprogram.exe
これをメモ帳に入れて.bat
として保存すると、これを行うバッチファイルが作成されます。
例として10秒を使用しましたが、ニーズに合わせて調整してください。
また、Vista以降を使用している場合は、ping
行を破棄して、代わりにはるかに簡単なtimeout
コマンドを使用できます。
timeout /t 10
そのような関数は存在しないようですが、タスクスケジューラを介してWindowsタスクとして実行することで実行可能だと思います。そこから、実行の制限を設定できます。設定は次のようになります。タスクが次の時間より長く実行された場合は停止します:、ここから詳細を取得できます: http://technet.Microsoft.com/en-us/library/ cc722178.aspx
PowerShellの使用に悩むことができる場合:_$app = Start-Process -PassThru -FilePath 'notepad' -ArgumentList 'test.txt'
_はtest.txtの引数でメモ帳を開始します(複数の引数は_,
_で区切ることができます。
_Start-Sleep -Seconds 10
_は10秒間スリープします。
$app.Kill()
または_taskkill /PID $app.Id
_のいずれかが、開始されたアプリケーションを強制終了します。
PowerShellのみを呼び出してプロセスを開始し、そのPIDを変数に格納するcmdソリューションを使用する場合は、for /F %A in ('powershell -Command "(Start-Process -PassThru -FilePath 'notepad' -ArgumentList 'test.txt').Id"') do set PID=%A
(。bat/.cmdから呼び出す場合は、_%%A
_を使用する必要があります。 _%A
_)の代わりに。次に、@ BaliCのタイムアウト方法と_taskkill /PID %PID%
_を使用して、開始されたアプリケーションを強制終了できます。
解決策:
Windowsでは、3つのバッチファイルを作成する必要があります
process.bat
@ECHO OFF
start /b cm.bat
start cmd.exe /c run.bat
EXIT
cm.bat
@ECHO OFF
a.exe < input.txt > out.txt
taskkill /im a.exe /f
taskkill /im cmd.exe /f
EXIT
run.bat
@ECHO off
timeout /t 5
taskkill /im a.exe /f
taskkill /im cmd.exe /f
EXIT
次に、process.batを実行します。 cm.batとrun.batの両方を同時に/並行して開始します。 cm.batのa.exeが終了したとき。 cm.batはrun.batを強制終了するため、ubuntuタイムアウトとして機能します。