ব্যাচ স্ক্রিপ্টের মাধ্যমে কোনও প্রক্রিয়া চলছে কিনা তা পরীক্ষা করে দেখুন


260

কোনও ব্যাচ (ভাল সিএমডি) ফাইল থেকে কোনও অ্যাপ্লিকেশন চলছে কিনা তা আমি কীভাবে পরীক্ষা করতে পারি?

কোনও প্রোগ্রাম ইতিমধ্যে চালু থাকলে আমার আর একটি উদাহরণ চালু করতে হবে না। (আমি কেবল অ্যাপ্লিকেশনটিকে একক উদাহরণ হিসাবে পরিবর্তন করতে পারি না))

এছাড়াও অ্যাপ্লিকেশনটি কোনও ব্যবহারকারীর হিসাবে চলতে পারে।



12
একটি প্রশ্নের নকল পাঁচ বছর পরে জিজ্ঞাসা?
ম্যাট লেইস

@ LưuVĩnhPhúc এখনও পর্যন্ত তারা তুলনামূলকভাবে খুব কাছাকাছি নেই।
কার্ডিনাল -

@ জ্যাককিরবি কে বলেছেন যে এটি সম্পর্কিত নয়?
ফুক্লভিভি

3
@ ইউপসডাজি হ্যাঁ আমি এই ক্ষেত্রে ভুল হতে পারি তবে সাধারণ নিয়মটি হল উত্তরের
উত্তোলন

উত্তর:


330

গ্রিপ ব্যবহার করে অনুপ্রাণিত হয়ে আরেকটি সম্ভাবনা নিয়ে এসেছি :

tasklist /FI "IMAGENAME eq myapp.exe" 2>NUL | find /I /N "myapp.exe">NUL
if "%ERRORLEVEL%"=="0" echo Program is running

এটি অতিরিক্ত ফাইল সংরক্ষণ করার দরকার নেই, তাই আমি এই পদ্ধতিটি পছন্দ করি।


7
এটি আমার পক্ষে দুর্দান্তভাবে কাজ করেছে (উইন্ডোজ এক্সপি এসপি 3) আইএমএইচও এটি এখানে প্রস্তাবিত
সমস্তগুলির

2
এই কমান্ড লাইনে আমার সিনট্যাক্স সমস্যা ছিল। এটিকে কাজ করার জন্য আমি এটিকে tasklist /FI "IMAGENAME eq winword.exe" 2>NUL | find /I /N "winword.exe">NUL/ if %ERRORLEVEL%==1 goto wordnotrunningএ পরিবর্তন করেছি (যদি অংশগুলির চারপাশের উদ্ধৃতিটি সন্দেহ করা হয়
স্টিভ বি

4
দয়া করে মনে রাখবেন এক্সপির অন্যান্য ভাষার সংস্করণগুলিতে ফিল্টার নামগুলি কোডে অনুবাদ করা হয়েছিল তবে সহায়তা /?স্ক্রিনে নয়। সুতরাং উদাহরণস্বরূপ IMAGENAMEপোলিশ সংস্করণ হয় NAZWA_OBRAZU
RSSk82

3
উইন Under এর অধীনে আমাকে এটিকে tasklist /FI "IMAGENAME eq myapp.exe" /NH | find /I /N "myapp.exe" >NUL প্রথমে এনএইউতে পরিবর্তন করতে হবে অপ্রয়োজনীয় বলে মনে হচ্ছে, '2' কী জন্য তা আমার কোনও ধারণা নেই, / এনএইচ optionচ্ছিক।
জান ডগজেন

12
টাসলিস্টটি সর্বদা 0 এর সাথে প্রস্থান করে 0 এটি কোনও মিলে যাওয়া টাস্কগুলি সন্ধান করে বা না পেয়েছে, যার কারণে এটি নিজেরাই অকেজো। যেহেতু আপনাকে এর আউটপুট চেক করতে আপনাকে (বা ফাইন্ডস্টার) ব্যবহার করতে হবে, তাই টাস্কলিস্টের ফিল্টারগুলি ব্যবহার করার কোনও মানে নেই। শুধু টাস্কলিস্ট করুন "myprog.exe"> নুল: && গোটো ফাউন্ডিট বা সামসুচ অনুসন্ধান করুন। টাস্কলিস্টের জন্য আপনার / ভি (ভার্বোজ) বিকল্পের প্রয়োজন হতে পারে।
ডেনিস হাও

61

আমি কীভাবে এটি কাজ করেছিলাম তা এখানে:

tasklist /FI "IMAGENAME eq notepad.exe" /FO CSV > search.log

FOR /F %%A IN (search.log) DO IF %%~zA EQU 0 GOTO end

start notepad.exe

:end

del search.log

এটি ইতিমধ্যে চালু না থাকলে উপরের নোটপ্যাডটি খুলবে ।

সম্পাদনা: নোট করুন যে এটি টাসলিস্ট থেকে লুকানো অ্যাপ্লিকেশনগুলি খুঁজে পাবে না। এটিতে স্বয়ংক্রিয়ভাবে লুকানো থাকায় কোনও পৃথক ব্যবহারকারী হিসাবে চলমান কোনও নির্ধারিত কাজ অন্তর্ভুক্ত থাকবে।


2
টাস্কলিস্ট ফর্ম্যাটটি সিএসভি বা অন্য কোনও টেবিলে পরিবর্তন করা গুরুত্বপূর্ণ কারণ এটি টাস্কলিস্টের ডিফল্ট লেআউট (টেবিল) দীর্ঘ চিত্রের নামগুলি কেটে দেয় যা যুক্তি ভাঙে।
স্কট হোয়াইট

4
এই সমাধানটি ভিস্টায় কাজ করবে না কারণ প্রক্রিয়াটি পাওয়া না গেলেও টাস্ক্লিস্ট কিছু আউটপুট উত্পাদন করে। আমি অনুমান একই 7. Windows এর জন্য সত্য
dbenham

উইন্ডোজ ১০-এ কাজ করে না। অনুসন্ধান.লগে "INFO: কোনও কাজ চলছে না যা নির্দিষ্ট মানদণ্ডের সাথে মেলে।" এবং কোনও নোটপ্যাড শুরু করা হয়নি
সের্গেই

46

আমি চাওমাস্টারের সমাধানটি পছন্দ করি! তবে আমি এমন একটি সমাধান চেয়েছিলাম যা অন্য কোনও বাহ্যিক প্রোগ্রাম শুরু করে না (যেমন find.exe বা findstr.exe )। সুতরাং আমি ম্যাট লেসির সমাধান থেকে ধারণাটি যুক্ত করেছি, যা একটি এড়ানো যায় টেম্প ফাইলও তৈরি করে। শেষে আমি মোটামুটি সহজ সমাধান খুঁজে পেতে পারি, তাই আমি এটি ভাগ করে নিই ...

SETLOCAL EnableExtensions
set EXE=myprog.exe
FOR /F %%x IN ('tasklist /NH /FI "IMAGENAME eq %EXE%"') DO IF %%x == %EXE% goto FOUND
echo Not running
goto FIN
:FOUND
echo Running
:FIN

এটি আমার জন্য সুন্দরভাবে কাজ করছে ...


এই সমাধানটি কার্যকরভাবে কাজ করে - উইন্ডোজ 8.1 এ পরীক্ষিত tested আমি লক্ষ্য করেছি যে এটি কেস-সংবেদনশীল।
অলিভার-ক্লেয়ার

@ লর্ডস্ক্রি যেমন আমি আন * এক্স সিস্টেমে কাজ করি সে ক্ষেত্রে সংবেদনশীলতা আমার পক্ষে ভাল! সংবেদনশীল ফাইলের নাম সক্ষম করতে আমি ফাইল সিস্টেমটি সেট করে দিয়েছি। ;)
সত্য

উইন্ডোজ 7 এক্স 64
মিস্টার রুবিক্স

% X প্রথম স্থান পর্যন্ত অ্যাপ্লিকেশন নামের অংশ হওয়ার সাথে সাথে অ্যাপ্লিকেশনটির নামে একটি জায়গা থাকলে এটি কাজ করে না।
ক্রিস

এর সম্ভাব্য সমাধান হ'ল% x == ইনফো: এটি পরীক্ষা করে পরিবর্তে অ্যাপ্লিকেশনটি খুঁজে পাওয়া যায়নি কিনা তা যাচাই করা উচিত তবে আমি জানিনা যে এটি উইন্ডোজের কোন সংস্করণে কাজ করবে বা এর থেকে আরও ভাল সমাধান হবে কিনা।
ক্রিস

21

টাসকলিস্টের পরিবর্তে কিউপ্রোসেস ব্যবহার করার জন্য এনপোকমাকার পরামর্শটি দুর্দান্ত তবে, এর উত্তরটি এত বড় এবং জটিল যে এর বেশ সরল সংস্করণ পোস্ট করার জন্য আমার দায়বদ্ধ বলে মনে হচ্ছে যা আমার ধারণা, বেশিরভাগ অ-উন্নত ব্যবহারকারীদের সমস্যা সমাধান করবে:

QPROCESS "myprocess.exe">NUL
IF %ERRORLEVEL% EQU 0 ECHO "Process running"

প্রশাসক কঠোরতার সাথে ব্যবহারকারীর সাথে উপরের কোডটি উইন্ডোজ 7 এ পরীক্ষা করা হয়েছিল।


আমি এই ধারণাটি কেবল একটি স্বয়ংক্রিয় প্রক্রিয়া দু'বার চালানো বন্ধ করতে ব্যবহার করেছি এবং এটি একটি কবজির মতো কাজ করেছে!
ডেভি সি সি

আমি অবশ্যই বলব যে এই আদেশের বিপরীতে, টাসলিস্ট সমাধানগুলি কেবল এ জাতীয় সাধারণ ক্যোয়ারির জন্য খুব জটিল দেখায় না, তবে তারা একটি দ্বিতীয় বা তাই চালায় এবং প্রচুর সিপিইউ ব্যবহার করে! এটি আরও ভাল, কোনও অ্যাডমিন অনুমতি ছাড়াও কাজ করেছে (উইন্ডোজ সার্ভার 2012)।
ইউজিন মেরিন

নামটির মধ্যে অ্যাপ্লিকেশনটির স্পেস থাকলে এটি সবচেয়ে সহজ এবং সর্বোত্তম সমাধান বলে মনে হয় (কমপক্ষে আমার জন্য) এটি যেমনটি ঠিক তেমন কাজ করে। আমি আগ্রহী যে এই সমাধানের সীমাবদ্ধতাগুলি কী এবং কেন এর বেশি ভোট নেই।
ক্রিস

20

উইন্ডোজ অধীনে আপনি উইন্ডোজ ম্যানেজমেন্ট ইনস্ট্রুমেন্টেশন (ডাব্লুএমআই) ব্যবহার করে নির্দিষ্ট কমান্ড লাইনের কোনও অ্যাপ্লিকেশন চালু না হয়েছে তা নিশ্চিত করতে ব্যবহার করতে পারেন, উদাহরণস্বরূপ:

wmic process where (name="nmake.exe") get commandline | findstr /i /c:"/f load.mak" /c:"/f build.mak" > NUL && (echo THE BUILD HAS BEEN STARTED ALREADY! > %ALREADY_STARTED% & exit /b 1)


নোট করুন যে ডাব্লুএমআইসি প্রশাসনিক সুযোগ সুবিধাগুলি প্রয়োজন; যদি আপনি এটি না থাকে, তাহলে Only the administrator group members can use WMIC.EXE.দ্বারা অনুসরণReason:Win32 Error: Access is denied.
Jeroen Wiert Pluimers

আমি মনে করি এটি সর্বোত্তম সমাধান, কারণ
ডাব্লুএমইসি


8

আমি প্রোগ্রাম ফাইলগুলিতে ইনস্টল করা http://www.teamcti.com/pview/prcview.htm থেকে PV.exe ব্যবহার করি \ এই জাতীয় ব্যাচ ফাইল সহ পিভি:

@echo off
PATH=%PATH%;%PROGRAMFILES%\PV;%PROGRAMFILES%\YourProgram
PV.EXE YourProgram.exe >nul
if ERRORLEVEL 1 goto Process_NotFound
:Process_Found
echo YourProgram is running
goto END
:Process_NotFound
echo YourProgram is not running
YourProgram.exe
goto END
:END

1
এটি উইন্ডোজ on. এ আমার জন্য কাজ করে 2nd য় লাইনটি সেই ডিরেক্টরিতে প্রোগ্রাম রয়েছে যা প্রোগ্রামটি নয়।
ফ্যাবিও সিওনিনি

8

ট্রুওয়াইয়ের উত্তরটি সবচেয়ে মার্জিত সমাধান বলে মনে হয়েছিল, তবে আমাকে কিছুটা গোলমাল করতে হয়েছিল কারণ আমি বুঝতে পারছিলাম না ঠিক কী চলছে। আশাকরি পরবর্তী ব্যক্তির জন্য কিছুটা সময় সাশ্রয় করার জন্য আমাকে জিনিসগুলি পরিষ্কার করতে দিন।

ট্রুওয়াইয়ের পরিবর্তিত উত্তর:

::Change the name of notepad.exe to the process .exe that you're trying to track
::Process names are CASE SENSITIVE, so notepad.exe works but Notepad.exe does NOT
::Do not change IMAGENAME
::You can Copy and Paste this into an empty batch file and change the name of
::notepad.exe to the process you'd like to track
::Also, some large programs take a while to no longer show as not running, so
::give this batch a few seconds timer to avoid a false result!!

@echo off
SETLOCAL EnableExtensions

set EXE=notepad.exe

FOR /F %%x IN ('tasklist /NH /FI "IMAGENAME eq %EXE%"') DO IF %%x == %EXE% goto ProcessFound

goto ProcessNotFound

:ProcessFound

echo %EXE% is running
goto END
:ProcessNotFound
echo %EXE% is not running
goto END
:END
echo Finished!

যাইহোক, আমি আশা করি এটি সাহায্য করে। আমি জানি কখনও কখনও ব্যাচ / কমান্ড-লাইন পড়া আমার মত বিড়ম্বনার মতো হতে পারে কখনও কখনও আপনি যদি আমার মতো নবাগত একজন হন।


6

ম্যাট লসে দ্বারা উপলব্ধ উত্তর উইন্ডোজ এক্সপি জন্য কাজ করে। যাইহোক, উইন্ডোজ সার্ভার 2003 লাইন

 tasklist /FI "IMAGENAME eq notepad.exe" /FO CSV > search.log

আয়

তথ্য: নির্দিষ্ট কাজগুলির সাথে মেলে এমন কোনও কাজ চলছে না।

প্রক্রিয়া চলমান হিসাবে যা পড়া হয়।

আমার কাছে ব্যাচের স্ক্রিপ্টিংয়ের অভিজ্ঞতার হিপ নেই, সুতরাং আমার আত্ম-অনুশাসনটি তখন search.logফাইলটিতে প্রক্রিয়াটির নাম অনুসন্ধান করা এবং ফলাফলগুলিকে অন্য কোনও ফাইলে পাম্প করা এবং কোনও আউটপুট অনুসন্ধান করা search

tasklist /FI "IMAGENAME eq notepad.exe" /FO CSV > search.log

FINDSTR notepad.exe search.log > found.log

FOR /F %%A IN (found.log) DO IF %%~zA EQU 0 GOTO end

start notepad.exe

:end

del search.log
del found.log

আমি আশা করি এটি অন্য কাউকে সহায়তা করে।


এটি উইন ২০০৮ এর জন্য কাজ করে +
মঙ্গেশ পিম্পালকর

5

আমি WMICএবং TASKLISTটুলস কিন্তু তারা বাড়িতে উপলভ্য নয় / windows.Another উপায় মৌলিক সংস্করণ ব্যবহার করা QPROCESS(বেশী আছে টার্মিনাল পরিষেবার জন্য প্রায় প্রতিটি জানালা মেশিনে কমান্ড উপলব্ধ নেই - আমি শুধু মনে জন্য SP2 ছাড়া এক্সপি win, তাই practialy যে উইন্ডোজ মেশিন):

@echo off
:check_process
setlocal
if "%~1" equ "" echo pass the process name as forst argument && exit /b 1
:: first argument is the process you want to check if running
set process_to_check=%~1
:: QPROCESS can display only the first 12 symbols of the running process
:: If other tool is used the line bellow could be deleted
set process_to_check=%process_to_check:~0,12%

QPROCESS * | find /i "%process_to_check%" >nul 2>&1 && (
    echo process %process_to_check%  is running
) || (
    echo process %process_to_check%  is not running
)
endlocal

QPROCESSকমান্ডটি তেমন শক্তিশালী নয় TASKLISTএবং কেবলমাত্র প্রক্রিয়া নামের 12 টি প্রতীক দেখানোর ক্ষেত্রে সীমাবদ্ধ তবে TASKLISTএটি উপলভ্য না হলে বিবেচনা করা উচিত ।

আরও সহজ ব্যবহার যেখানে এটি নামটি ব্যবহার করে যদি প্রক্রিয়াটিকে আর্গুমেন্ট হিসাবে ব্যবহার করা হয় ( .exeআপনি যেখানে এক্সিকিউটেবল নামটি পাস করেন এই ক্ষেত্রে প্রত্যয়টি বাধ্যতামূলক):

@echo off
:check_process
setlocal
if "%~1" equ "" echo pass the process name as forst argument && exit /b 1
:: first argument is the process you want to check if running
:: .exe suffix is mandatory
set "process_to_check=%~1"


QPROCESS "%process_to_check%" >nul 2>&1 && (
    echo process %process_to_check%  is running
) || (
    echo process %process_to_check%  is not running
)
endlocal

QPROCESSব্যবহারের দুটি পদ্ধতির মধ্যে পার্থক্য হ'ল QPROCESS *সমস্ত প্রক্রিয়া তালিকাভুক্ত করে যখন QPROCESS some.exeবর্তমান ব্যবহারকারীর জন্য কেবলমাত্র প্রক্রিয়াগুলি ফিল্টার করবে।

এর WMIপরিবর্তে উইন্ডোজ স্ক্রিপ্ট হোস্ট এক্সেকের মাধ্যমে অবজেক্টগুলি ব্যবহার WMICকরাও একটি বিকল্প I এটি প্রতিটি উইন্ডোজ মেশিনে চালানো উচিত (যেখানে ডাব্লুএসএইচ বন্ধ রয়েছে তা বাদ দিয়ে তবে এটি একটি বিরল ঘটনা) eএখানে ব্যাট ফাইলটি যা ডাব্লুএমআইয়ের মাধ্যমে সমস্ত প্রক্রিয়া তালিকাভুক্ত করে lists ক্লাস এবং QPROCESSউপরের স্ক্রিপ্টের পরিবর্তে ব্যবহার করা যেতে পারে (এটি একটি jscript / bat সংকর এবং এটি হিসাবে সংরক্ষণ করা উচিত .bat):

@if (@X)==(@Y) @end /* JSCRIPT COMMENT **


@echo off
cscript //E:JScript //nologo "%~f0"
exit /b

************** end of JSCRIPT COMMENT **/


var winmgmts = GetObject("winmgmts:\\\\.\\root\\cimv2");
var colProcess = winmgmts.ExecQuery("Select * from Win32_Process");
var processes =  new Enumerator(colProcess);
for (;!processes.atEnd();processes.moveNext()) {
    var process=processes.item();
    WScript.Echo( process.processID + "   " + process.Name );
}

এবং একটি পরিবর্তন যা কোনও প্রক্রিয়া চলছে কিনা তা যাচাই করবে:

@if (@X)==(@Y) @end /* JSCRIPT COMMENT **


@echo off
if "%~1" equ "" echo pass the process name as forst argument && exit /b 1
:: first argument is the process you want to check if running
set process_to_check=%~1

cscript //E:JScript //nologo "%~f0" | find /i "%process_to_check%" >nul 2>&1 && (
    echo process %process_to_check%  is running
) || (
    echo process %process_to_check%  is not running
)

exit /b

************** end of JSCRIPT COMMENT **/


var winmgmts = GetObject("winmgmts:\\\\.\\root\\cimv2");
var colProcess = winmgmts.ExecQuery("Select * from Win32_Process");
var processes =  new Enumerator(colProcess);
for (;!processes.atEnd();processes.moveNext()) {
    var process=processes.item();
    WScript.Echo( process.processID + "   " + process.Name );
}

দুটি বিকল্প নেই এমন মেশিনে ব্যবহার করা যেতে পারে TASKLIST

চূড়ান্ত কৌশল ব্যবহার করা হয় MSHTA। এটি এক্সপি এবং উপরের প্রতিটি উইন্ডোজ মেশিনে চলবে এবং উইন্ডোজ স্ক্রিপ্ট হোস্ট সেটিংসের উপর নির্ভর করে না। কলটি MSHTAযদিও কিছুটা পারফরম্যান্স হ্রাস করতে পারে (আবার ব্যাট হিসাবে সংরক্ষণ করা উচিত):

@if (@X)==(@Y) @end /* JSCRIPT COMMENT **
@echo off

setlocal
if "%~1" equ "" echo pass the process name as forst argument && exit /b 1
:: first argument is the process you want to check if running

set process_to_check=%~1


mshta "about:<script language='javascript' src='file://%~dpnxf0'></script>" | find /i "%process_to_check%" >nul 2>&1 && (
    echo process %process_to_check%  is running
) || (
    echo process %process_to_check%  is not running
)
endlocal
exit /b
************** end of JSCRIPT COMMENT **/


   var fso= new ActiveXObject('Scripting.FileSystemObject').GetStandardStream(1);


   var winmgmts = GetObject("winmgmts:\\\\.\\root\\cimv2");
   var colProcess = winmgmts.ExecQuery("Select * from Win32_Process");
   var processes =  new Enumerator(colProcess);
   for (;!processes.atEnd();processes.moveNext()) {
    var process=processes.item();
    fso.Write( process.processID + "   " + process.Name + "\n");
   }
   close();

2

সিএমডি ইন বিল্ট দিয়ে কীভাবে এটি করবেন তা আমি জানি না তবে আপনার যদি গ্রেপ থাকে তবে আপনি নিম্নলিখিতটি চেষ্টা করতে পারেন:

tasklist /FI "IMAGENAME eq myApp.exe" | grep myApp.exe
if ERRORLEVEL 1 echo "myApp is not running"

2

কেবল উল্লেখ করছি, যদি আপনার কার্যের নামটি সত্যিই দীর্ঘ হয় তবে tasklistফলাফলের মধ্যে এটি সম্পূর্ণরূপে প্রদর্শিত হবে না , সুতরাং বিপরীতটি পরীক্ষা করা নিরাপদ (স্থানীয়করণ ছাড়া অন্য) হতে পারে।

এই উত্তরের বিভিন্নতা :

:: in case your task name is really long, check for the 'opposite' and find  the message when it's not there
tasklist /fi "imagename eq yourreallylongtasknamethatwontfitinthelist.exe" 2>NUL | find /I /N "no tasks are running">NUL
if "%errorlevel%"=="0" (
    echo Task Found
) else (
    echo Not Found Task
)

0

আমি এখানে উইন্ডোজ ধরে নিচ্ছি। সুতরাং, আপনাকে তথ্যটি পেতে ডাব্লুএমআই ব্যবহার করতে হবে। স্ক্রিপ্টিং গাইয়ের সংরক্ষণাগারটি স্ক্রিপ্ট থেকে ডাব্লুএমআই কীভাবে ব্যবহার করতে হয় তার অনেক উদাহরণের জন্য দেখুন।


0

আমি ম্যাট (2008-10-02) সরবরাহিত স্ক্রিপ্টটি ব্যবহার করেছি । আমার কেবল সমস্যাটিই হ'ল এটি search.logফাইলটি মুছবে না । আমি আশা করি কারণ cdআমার প্রোগ্রামটি শুরু করতে আমাকে অন্য কোনও জায়গায় যেতে হয়েছিল। আমি cdবিএটি ফাইল যেখানে এবং সেখানে ফিরে এসেছি search.log, তবে এটি মুছবে না। সুতরাং আমি সমাধান করেছি যে search.logফাইলটি শেষের পরিবর্তে প্রথমে মুছে ফেলে ।

del search.log

tasklist /FI "IMAGENAME eq myprog.exe" /FO CSV > search.log

FOR /F %%A IN (search.log) DO IF %%-zA EQU 0 GOTO end

cd "C:\Program Files\MyLoc\bin"

myprog.exe myuser mypwd

:end

1
@ সেবাস্তিয়ান: এখানে আরও কিছু অতিরিক্ত তথ্য যুক্ত হয়েছে, তাই আমি এটিকে উত্তর হিসাবে ছেড়ে দিতে আগ্রহী।
বিল করুন

0

আপনার প্যারেন্ট প্রসেসের নামটি পরীক্ষা করা উচিত, একটি নেট ভিত্তিক সমাধান ** সম্পর্কে কোড প্রকল্প নিবন্ধটি দেখুন ।

চেক করার জন্য একটি অ-প্রোগ্রাম্যাটিক উপায়:

  1. Cmd.exe চালু করুন
  2. একটি অ্যাপ্লিকেশন চালু করুন (উদাহরণস্বরূপ, c:\windows\notepad.exe)
  3. প্রসেস এক্সপ্লোরারে নোটপ্যাড.এক্সই প্রক্রিয়াটির বৈশিষ্ট্যগুলি পরীক্ষা করুন
  4. মূল প্রক্রিয়া পরীক্ষা করুন (এটি cmd.exe দেখায়)

প্যারেন্ট প্রসেসের নাম পেয়ে একই পরীক্ষা করা যায়।


0

উপর নির্মাণের vtrz এর উত্তর এবং একটি অন্য বিষয়ে স্যামুয়েল Renkert এর উত্তর , আমি নিম্নলিখিত স্ক্রিপ্ট যে শুধুমাত্র রান নিয়ে এসেছেন %EXEC_CMD%তা ইতিমধ্যেই চলছে নয়:

@echo off
set EXEC_CMD="rsync.exe"
wmic process where (name=%EXEC_CMD%) get commandline | findstr /i %EXEC_CMD%> NUL
if errorlevel 1 (
    %EXEC_CMD% ...
) else (
    @echo not starting %EXEC_CMD%: already running.
)

যেমনটি আগে বলা হয়েছিল, এর জন্য প্রশাসনিক সুবিধাগুলি প্রয়োজন।


আমার পক্ষে কাজ করে নি, এবং আমি একটি অ্যাডমিন অ্যাকাউন্ট ব্যবহার করছি। একটি ডস বাক্সটি উপস্থিত হবেNode - (computer name) ERROR: Description = Invalid query
খভেরিম

1
আমার জন্য ঠিক কাজ করে।
মার্ক ডানকান

1
এখানে উইন্ডোজ 7 এর জন্য দুর্দান্ত কাজ করে। কোন কারণ নাই.
galacticninja

0

আমার আবার চেষ্টা করে সমাধান দরকার solution প্রক্রিয়াটি না পাওয়া পর্যন্ত এই কোডটি চলবে এবং তারপরে এটি হত্যা করবে। আপনি চাইলে টাইমআউট বা যেকোন কিছু সেট করতে পারেন।

মন্তব্য:

  • ".Exe" বাধ্যতামূলক
  • আপনি নীচে সংস্করণ, পরামিতি দিয়ে একটি ফাইল চালানোযোগ্য করতে পারে
    :: Set programm you want to kill
    :: Fileextension is mandatory
    SET KillProg=explorer.exe

    :: Set waiting time between 2 requests in seconds
    SET /A "_wait=3"

    :ProcessNotFound
        tasklist /NH /FI "IMAGENAME eq %KillProg%" | FIND /I "%KillProg%"
        IF "%ERRORLEVEL%"=="0" (
            TASKKILL.EXE /F /T /IM %KillProg%
        ) ELSE (
            timeout /t %_wait%
            GOTO :ProcessNotFound
        )

taskkill.bat:

    :: Get program name from argumentlist
    IF NOT "%~1"=="" (
        SET "KillProg=%~1"
    ) ELSE (
        ECHO Usage: "%~nx0" ProgramToKill.exe & EXIT /B
    )

    :: Set waiting time between 2 requests in seconds
    SET /A "_wait=3"

    :ProcessNotFound
        tasklist /NH /FI "IMAGENAME eq %KillProg%" | FIND /I "%KillProg%"
        IF "%ERRORLEVEL%"=="0" (
            TASKKILL.EXE /F /T /IM %KillProg%
        ) ELSE (
            timeout /t %_wait%
            GOTO :ProcessNotFound
        )

সাথে চালাও .\taskkill.bat ProgramToKill.exe


-2

আমার প্রোগ্রাম.এক্সি চলছে কিনা তা পরীক্ষা করতে আমি সাধারণত সিএমডি প্রম্পটে নিম্নলিখিত কমান্ডটি কার্যকর করি:

tasklist | grep program
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.