Giới hạn thời gian dòng lệnh của Windows


9

Làm thế nào tôi có thể đi về việc giới hạn thời gian thực hiện của một chương trình dòng lệnh trong windows? Tôi biết trong linux có thời gian chờ / thời gian có sẵn, nhưng tôi không thể tìm thấy các tiện ích tương tự cho windows.


Có lẽ tốt nhất là viết một tập lệnh Powershell hoặc Python để làm điều này.
Đột phá

Câu trả lời:


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

Nếu bạn đặt nó trong notepad và lưu nó vì .batnó sẽ tạo ra một tệp bó sẽ làm điều này.

Tôi đã sử dụng 10 giây làm ví dụ, chỉ cần điều chỉnh theo nhu cầu của bạn.

Ngoài ra, nếu bạn đang sử dụng Vista trở lên, bạn có thể loại bỏ pingdòng và sử dụng timeoutlệnh dễ dàng hơn nhiều ở vị trí của nó

timeout /t 10

1
Làm thế nào điều này sẽ xử lý các đối số và nhiều phiên bản của chương trình của bạn? Sẽ thật tuyệt nếu bắt đầu sẽ trả lại một PID, nhưng không có may mắn như vậy ...

Bạn có thể truyền đối số với start yourprogram.exe yourarguments. Vâng, nó sẽ taskkillcó một tùy chọn để giết bởi PID nhưng bạn sẽ phải trích xuất nó từ tasklistđầu tiên dựa trên tên, nó trở lại ở ô vuông nếu bạn có nhiều trường hợp. Đây chỉ là một giới hạn của cmd.
Bali C

1
+1 Sử dụng ping làm bộ đếm thời gian chờ là một ý tưởng hài hước :)
kol

Nối > NULvào pinglệnh để nén nó.
starbeamrainbowlabs

4

Như tôi biết dường như không có chức năng nào như vậy tồn tại, nhưng tôi nghĩ rằng nó có thể thực hiện được nếu bạn làm cho nó chạy như một tác vụ windows thông qua Trình lập lịch tác vụ, từ đó bạn có thể đặt giới hạn thực thi, cài đặt có tên là: Dừng tác vụ nếu nó chạy lâu hơn : , bạn có thể biết thêm chi tiết từ đây: http://technet.microsoft.com/en-us/l Library / cc722178.aspx


3

Nếu bạn có thể bị làm phiền với việc sử dụng PowerShell: $app = Start-Process -PassThru -FilePath 'notepad' -ArgumentList 'test.txt'sẽ bắt đầu notepad với một đối số test.txt (bạn có thể tách nhiều đối số bằng cách ,.

Start-Sleep -Seconds 10 sẽ ngủ trong 10 giây.

Hoặc là $app.Kill()hoặc taskkill /PID $app.Idsẽ giết ứng dụng đã bắt đầu.

Nếu bạn thích một giải pháp cmd sẽ chỉ gọi PowerShell để bắt đầu quá trình và sau đó lưu nó vào một biến: for /F %A in ('powershell -Command "(Start-Process -PassThru -FilePath 'notepad' -ArgumentList 'test.txt').Id"') do set PID=%A(khi được gọi từ .bat / .cmd bạn phải sử dụng %%Athay vì %A). Sau đó, bạn có thể sử dụng các phương thức hết thời gian của @ BaliC và taskkill /PID %PID%để tắt ứng dụng đã bắt đầu.


1

Giải pháp :

Trong cửa sổ, nó cần tạo ba tệp bó

quá trình

@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

chạy.bat

@ECHO off
timeout /t 5
taskkill /im a.exe /f 
taskkill /im cmd.exe /f

EXIT

Bây giờ Chạy tiến trình.bat. nó sẽ bắt đầu cả cm.bat và run.bat đồng thời / song song. Khi a.exe từ cm.bat chấm dứt; cm.bat giết run.bat và do đó nó sẽ hoạt động như thời gian chờ của Ubuntu.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.