Jak w CMD sprawdzić, czy dany program jest uruchomiony?

Dzisiaj podzielę się z Wami poradą jak stworzyć plik wsadowy (.bat), który sprawdzi, czy na liście uruchomionych procesów znajduje się dany program. Do czego może się przydać taki trick?

Kiedyś spotkałem się z narzędziem, które pozwalało uruchomić się użytkownikowi wielokrotnie, a działało poprawnie tylko przy jednej instancji. Jako, że program uruchamiał się długo bez widocznego okienka, użytkownik niecierpliwie uruchamiał go po raz drugi i trzeci… Rozwiązaniem było stworzenie pliku, który uruchomi go tylko i wyłącznie, gdy na liście procesów nie ma danego pliku .exe. Innym razem dostałem zlecenie, aby maszyna restartowała się, gdy tylko dany proces przestanie działać.

Oto jedno z możliwych rozwiązań tego problemu. Wykorzystamy polecenie „Tasklist”
i wspomniane wcześniej filtrowanie wyników| Find „słowo kluczowe

Przed uruchomieniem programu ABC.exe sprawdzamy, czy działa aby już nie działa, a jeśli działa, informujemy o tym użytkownika.

@echo off
tasklist | find „ABC.exe”
IF %errorlevel% EQU 0 goto PROGRAM_ABC_DZIALA

echo Nie ma drugiej instancji, zatem uruchamiamy nasz program
start C:\programs\SPECE.IT\ABC\ABC.exe
timeout 5
exit

:PROGRAM_ABC_DZIALA
cls
echo “Program ABC jest juz uruchomiony!”
timeout 5
:KONIEC
Exit

Nasz przykładowy plik wsadowy można przebudować na wiele sposobów np. zamiast informować użytkownika o uruchomionym programie, możemy ten program dla niego wyłączyć (polecenie „taskkill”). Można też sprawdzanie procesu zamknąć w niekończącej się pętli:

:od_nowa
—tu sprawadzamy, czy dziala–
Timeout 10
goto od_nowa

To jest dokładnie to, czego użyłem, aby restartować wspomnianą maszynę, gdy tylko wskazany plik .exe zniknie z listy procesów.

Mam nadzieję, że te proste tricki będą dla Was przydatne. Jeśli macie jakieś pytania lub sugestie, piszcie śmiało.

Łukasz Skalikow

Obecnie Manager IT. Przez lata byłem Inżynierem systemów. Jestem entuzjastą i specem od vSphere, Windows serwer, GPO. Od zawsze byłem zwolennikiem wiersza poleceń i automatyzacji. Obecnie, ze względu na pracę, rodzinę i wyjazdy służbowe, dużo mniej udzielam się na blogu, ale mam nadzieję, że pośród kilkuset porad opublikowanych na spece.it, wiele osób znajdzie dla siebie coś przydatnego :)

Przeczytaj także...

6 komentarzy

  1. Tomek napisał(a):

    Czy mógł by Pan napisać jak zaimplementować ten pomysł w taki sposób by Windows 7 po wykonaniu automatycznej kopi zapasowej sam się wyłączył?
    Kopia jest uruchomiana za pomocą harmonogramu zadań w środku nocy i nie wiadomo jak długo będzie trwać, więc polecenie shutdown z opóźnieniem czasowym może być nieprecyzyjne. Jedyny pomysł to żeby jakaś „wyższa” siła sprawdzała czy kopia się już ukończyła i po zatwierdzeniu wyłączyła komputer.

    • Łukasz Skalikow napisał(a):

      Mówimy o kopii wykonywanej wbudowanym Windowsowym mechanizmem, czy jakimś programem firmy trzeciej?
      Jak wygląda skrypt/polecenie uruchamiające backup?

    • Tomek napisał(a):

      Mówimy o wbudowanym mechanizmie do robienia kopi zapasowych z ustawionym harmonogramem zadań, dostępnym z panelu sterowania „Kopia zapasowa/Przywracanie”.

  2. Tomek napisał(a):

    Przykładowe zdjęcie windowsowego programu : http://lajfmajster.pl/images/2009/12/kopia-zapasowa.png

    Można w nim ustawić harmonogram o której ma się kopia wykonać. Niestety w harmonogramie tego zadania nie ma opcji która umożliwiła by zamknięcie systemu po wykonaniu zadania.
    Sam program ( Windowsowy Harmonogram zadań) który zarządza zadaniami mieści się w „Panel sterowania\Wszystkie elementy Panelu sterowania\Narzędzia administracyjne” otwierając go mamy możliwość edycji wcześniej utworzonego zadania backupu. To zadanie mieści się w zakładce porgtamu „Biblioteka Harmonogramu zadań\Microsoft\Windows\WindowsBackup”

    • Łukasz Skalikow napisał(a):

      Tomek, zacznij od zapoznania się poleceniem wbadmin, dzięki któremu możesz uruchamać backupy z CMD. Stwórz sobie plik wsadowy (.bat). Podepnij go w harmonogramie zadań. Następnie w pliku wsadowym po poleceniu wbadmin zamieścić shutdown.exe /s.

      Wyłączenie powinno się wykonać po backupie.

      Daj cynk, czy Ci sie udało. Może opublikujemy to jako Twoją poradę na naszym Blogu 🙂

  3. Tomek napisał(a):

    Witam, udało rozwiązać się mój problem takim skryptem:

    @echo off
    start sdclt.exe /KICKOFFJOB
    timeout 15
    :od_nowa
    tasklist /fi „username ne domena/konto” /fi „sessionname eq services”| find „rundll32.exe”
    IF %errorlevel% EQU 0 goto PROGRAM_DZIALA
    echo „Nie ma drugiej instancji, zatem uruchamiamy nasz program”
    E:\DeltaCopy\KopiaMoichDokumentow.dcp
    shutdown.exe /s /t 300 /f
    exit
    :PROGRAM_DZIALA
    cls
    echo „Program jest uruchomiony”
    timeout 600
    goto od_nowa
    :KONIEC
    Exit

    Żeby skrypt prawidłowo działał należy dostosować go do swojego komputera (domeny/konta miejsca wykonywania kopi itp.).

    Założenia skryptu

    1. Uruchamia program „sdclt.exe” odpowiedzialny za wykonywanie kopi zapasowej w Windowsie7. Dokładnie robi to samo co przycisk „Uruchom kopię zapasową teraz” znajdujący się w „Panel sterowania\Wszystkie elementy Panelu sterowania\Kopia zapasowa/Przywracanie”. Oczywiście wcześniej należy ustawić gdzie i jaka kopia mia się zrobić.
    2. Wykorzystując Pana pomysł na śledzenie zadań „tasklist”, z odpowiednimi parametrami wyłapuje proces „rundll32.exe” który jest odpowiedzialny za wykonywanie kopi w tle.
    3. Robię pętelkę „timeout 600” która sprawdza coz 10min czy kopia się już wykonała.
    4. Jak kopia się wykona, uruchamia się kolejny program „D:\DeltaCopy\KopiaMoichDokumentow.dcp” który wykonuje kopię moich dokumentów za pomocą protokołu RSYNC.
    5. Po wykonaniu zadania „shutdown.exe” komputer wyłącza się automatycznie.

    Ten skrypt dodałem do harmonogramu zadań z uprawnieniami administratora na jednym z mich kont. Kopia samego Windowsa jak i dokumentów jest ulokowana na serwerze sieciowym. Komputer po zmianach w biosie sam włącza się o zadanej porze i czeka na harmonogram zadań. Można również ustawić zdalny WOL (np. na serwerze bądź routerze), zamiast automatycznego startu. Wyeliminuje to problem niepotrzebnego włączenia komputera/laptopa jeśli nie ma sieci lub prądu.

Dodaj komentarz