Batas waktu baris perintah Windows

9

Bagaimana saya bisa membatasi waktu eksekusi program baris perintah di windows? Saya tahu di linux ada timeout / timelimit yang tersedia, tetapi saya tidak dapat menemukan utilitas serupa untuk windows.

ayu
sumber
Mungkin lebih baik menulis skrip Powershell atau Python untuk melakukan ini.
Terobosan

Jawaban:

9
start yourprogram.exe
ping 127.0.0.1 -n 10
taskkill /im yourprogram.exe

Jika Anda meletakkan ini di notepad dan simpan karena .batakan membuat file batch yang akan melakukan ini.

Saya telah menggunakan 10 detik sebagai contoh, hanya menyesuaikan dengan kebutuhan Anda.

Juga, jika Anda menggunakan Vista atau di atas, Anda dapat menghapus pinggaris dan menggunakan perintah yang jauh lebih mudah timeoutdi tempatnya

timeout /t 10
Bali C
sumber
1
Bagaimana ini menangani argumen dan banyak contoh program Anda? Akan lebih baik jika mulai akan mengembalikan PID, tetapi tidak ada keberuntungan ...
Anda dapat menyampaikan argumen start yourprogram.exe yourarguments. Ya itu akan, taskkillmemiliki opsi untuk membunuh oleh PID tetapi Anda harus mengekstraknya dari tasklistpertama berdasarkan nama, yang kembali pada titik awal jika Anda memiliki beberapa contoh. Ini hanya batasan cmd.
Bali C
1
+1 Menggunakan ping sebagai penghitung waktu waktu habis adalah ide lucu :)
kol
Tambahkan > NULke pingperintah untuk menekan outputnya.
starbeamrainbowlabs
4

Seperti yang saya tahu tampaknya tidak ada fungsi seperti itu ada, tapi saya pikir itu bisa dilakukan jika Anda membuatnya berjalan sebagai tugas windows melalui Penjadwal Tugas, dari sana Anda dapat mengatur batasan eksekusi, pengaturan bernama: Hentikan tugas jika dijalankan lebih lama dari:, Anda bisa mendapatkan detail lebih lanjut dari sini: http://technet.microsoft.com/en-us/library/cc722178.aspx

Simon Wang
sumber
3

Jika Anda merasa terganggu dengan menggunakan PowerShell: $app = Start-Process -PassThru -FilePath 'notepad' -ArgumentList 'test.txt'akan memulai notepad dengan argumen test.txt (Anda dapat memisahkan beberapa argumen dengan ,.

Start-Sleep -Seconds 10 akan tidur selama 10-an.

Entah $app.Kill()atau taskkill /PID $app.Idakan mematikan aplikasi yang dimulai.

Jika Anda lebih suka solusi cmd yang hanya akan memanggil PowerShell untuk memulai proses dan kemudian menyimpannya PID dalam variabel: for /F %A in ('powershell -Command "(Start-Process -PassThru -FilePath 'notepad' -ArgumentList 'test.txt').Id"') do set PID=%A(ketika dipanggil dari .bat / .cmd Anda harus menggunakan %%Abukan %A). Anda kemudian dapat menggunakan metode @ BaliC tentang waktu habis dan taskkill /PID %PID%untuk mematikan aplikasi yang dimulai.

mprill
sumber
1

Solusi:

Di windows perlu membuat tiga file batch

proses.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

Sekarang Jalankan process.bat. itu akan memulai cm.bat dan run.bat secara bersamaan / paralel. Ketika a.exe dari cm.bat berakhir; cm.bat membunuh run.bat dan karenanya akan berfungsi sebagai batas waktu ubuntu.

shawon
sumber