Dzwon.

Są ci, którzy przeczytali tę wiadomość przed tobą.
Subskrybuj odbieranie artykułów świeżych.
E-mail
Nazwa
Nazwisko
Jak chcesz przeczytać dzwonek
Bez spamu

Lubię narzędzia WMIC i listy zadań, ale nie są one dostępne w domu / głównych edycjach systemu Windows.another sposobem jest użycie poleceń qprocess dostępnych na prawie każdym oknie maszyny (dla tych, którzy mają usługi terminalowe - myślę, że tylko zwycięstwo XP bez dodatku SP2, więc praktyczne okno każdego urządzenia):

@echo Off: Check_Process SetLocal Jeśli "% ~ 1" Equ "" Echo przekazuje nazwę procesu jako Forst Argument && Exit / B 1 :: Pierwszy argument jest procesem, który chcesz sprawdzić, czy uruchomiony zestaw procesów_to_Check \u003d% ~ 1 :: qprocess Może wyświetlać tylko pierwsze 12 symboli procesu uruchomienia :: Jeśli używane jest inne narzędzie, linia poniżej może zostać usunięta Ustaw proces_to_check \u003d% procesu_to_check: ~ 0,12% qprocess * | Znajdź / I "% Process_to_Check%"\u003e Nul 2\u003e

Qprocess. Polecenie nie jest tak silne jak lista zadań i jest ograniczona w pokazie tylko 12 znaków nazwy procesu, ale powinna być brana pod uwagę, jeśli lista zadań nie jest dostępna.

Bardziej proste w użyciu, gdzie używa nazwy Jeśli proces jest jako argument (przyrostek.exe jest obowiązkowy w tym przypadku, gdy przekazujesz nazwę pliku wykonywalnego):

@echo Off: Check_Process SetLocal Jeśli "% ~ 1" EQU "" Echo przekazuje nazwę procesu jako Forst Argument && Exit / B 1 :: Pierwszy argument jest procesem, który chcesz sprawdzić, czy działa :: .exe przyrostek jest ustawiony " Process_to_check \u003d% ~ 1 "qprocess"% proces_to_check% "\u003e nul 2\u003e & 1 && (echo Process% proces_to_Check% jest uruchomiony) || (Proces echa% proces_to_check% nie działa) endlocal

Różnica między dwiema metodami zarządzania qprocessem, że qprocess * wymienia wszystkie procesy, podczas gdy qprocess some.exe będzie filtrować tylko procesy aktualny użytkownik.

Korzystanie z obiektów WMI za pomocą hosta Windows Script Host Exe zamiast WMIC jest również opcją. Musi również zacząć od wszystkich maszyn Windows (z wyłączeniem tych, w których wyłącza się WSH, ale jest to rzadki przypadek). Plik jest nietoperzem pliku, który wymienia wszystkie procesy za pomocą klas WMI i może być używany zamiast qprocess Skrypt powyżej (jest to hybrydowa myszy jscript / bat i musi zostać zapisana jako .bat):

@if (@x) \u003d\u003d (@ y) @end / * JScript Comment ** @echo Off Cscript // E: JScript // Nologo "% ~ F0" Exit / B ********** **** Koniec komentarza jscriptowego ** / var winmgmts \u003d getObject ("winmgmts: \\\\\\\\. Root CIMV2"); var colprocess \u003d winmgmts.execquery ("Wybierz * z Win32_Process"); Procesy VAR \u003d Nowy Eniorator (Colprocess); dla (;! procesy.tend (); procesy.movenext ()) (Var Process \u003d procesy.Item (); Wscript.echo (proces.Processid + "+ proces.

I modyfikacja, która sprawdzi, czy proces zostanie uruchomiony:

@if (@x) \u003d\u003d (@ y) @end / * jscript Komentarz ** @echo Off Jeśli "% ~ 1" EQU "" Echo przekazuje nazwę procesu jako Forst Argument & & Exit / B 1 :: Pierwszy argument Proces, który chcesz sprawdzić, czy uruchomiony zestaw procesu_to_check \u003d% ~ 1 CScript // E: JScript // Nologo "% ~ F0" | Znajdź / I "% Process_to_Check%"\u003e Nul 2\u003e & 1 && (proces echo% proces_to_Check% jest uruchomiony) || (Echo Proces% proces_to_check% nie działa) Wyjście / b ************** Koniec jscript Komentarz ** / var winmgMts \u003d GetObject ("WinmgMTS: \\\\\\\\ CIMV2 "); var colprocess \u003d winmgmts.execquery ("Wybierz * z Win32_Process"); Procesy VAR \u003d Nowy Eniorator (Colprocess); dla (;! Processes.tend (); procesy.Movenext ()) (Var Process \u003d procesy.Item (); Wscript.echo (proces.Processid + "+ Process.Name);)

dwie opcje mogą być używane na maszynach, które nie mają listy zadań.

Ostatnia technika jest używana przez MSHTA. Będzie działać na wszystkich maszynach Windows z XP i powyżej i nie zależy od ustawień. host Windows. Scenariusz. Wyzwanie MSHTA może zmniejszyć trochę na wydajność, chociaż (ponownie powinno zostać zapisane w BAT):

@if (@x) \u003d\u003d (@ y) @end / * jscript komentarz ** @echo Off SetLocal Jeśli "% ~ 1" Equ "" Echo przekazuje nazwę procesu jako Forst Argument && Exit / B 1 :: Pierwszy argument Czy proces, który chcesz sprawdzić, czy ustawienie uruchomienia procesu_to_check \u003d% ~ 1 MSHTA "O:"| Znajdź / I"% Process_to_Check% "\u003e Nul 2\u003e & 1 && (proces echo% procesu_to_Check% jest uruchomiony) || (proces echo% proces_to_check% nie działa) Endlocal Exit / B ******** * ***** Koniec komentarza JScript ** / Var FSO \u003d Nowy ActiveXObject ("Scripting.FilesystemObject"). GetstandasStream (1); var winmgmts \u003d GetObject ("WinmgMts: \\\\\\\\. Root Cimv2 "); var colprocess \u003d winmgmts.execquery (" Wybierz * z Win32_Process "); Var Procesy \u003d Nowy Enimerator (Colprocess); dla (;! Processes.ateend (); procesy ); Fso.write (proces.processid + "+ proces.name +" n ");) blisko ();

Próbuję znaleźć, czy proces opiera się na identyfikatorze procesu. Kod wygląda tak, na podstawie jednej z wiadomości na forum. Nie mogę rozważyć nazwy procesu, ponieważ istnieje kilka procesów pracujących pod tym samym nazwiskiem.

Def Festprocess: PS \u003d subprocess.Popen ("PS -EF | GREP" + PRESSID, Shell \u003d true, stdout \u003d subprocess.pipe) Wyjście \u003d PS.Stdout.Read () PS.STDOUT.Close () PS. Czekaj () Wyjście powrotne DEF ISProcessruning (processid): Wyjście \u003d FindProcessid (processid) IFPTUS Jeśli RE.Search (processid, wyjście) Czy None: Return True indziej: zwróć false 1111 72312 72311 0 0: 00.00 TTYS000 0: 00.00 / BIN / SH -C Ps -ef |. GREP 71676 1111 72314 72312 0 0: 00.00 TTYS000 0: 00.00 GREP 71676

Zawsze zwraca prawdziwe, ponieważ może znaleźć identyfikator procesu w wierszu wyjściowym.

Jakieś sugestie? Dziękuję za pomoc.

11 Rozwiązania Zbieraj formularz WWW dla "Sprawdź, czy proces pracuje w Pythonie (w Linux / Unix)"

Próbować:

OS.Kill (PID, 0)

Muszę odnieść sukces (i nic nie robić), jeśli proces istnieje lub rzuci wyjątek (który możesz złapać), jeśli proces nie istnieje.

Najprostsza odpowiedź, moim zdaniem (albit, być może nie doskonały), ma to zmienić

Ps -ef |. Grep.

W celu:

Ps -ef |. Grep. |. Grep -v grep.

Ignoruje listę procesów, aby wyszukać grep, zawierający proces PID, który próbujesz znaleźć.

Najwyraźniej odpowiedź użytkownika 9876 jest znacznie więcej "Pythonic".

Jest to trochę klituge, ale na * nix możesz użyć os.getpgid (PID) lub OS.Kill (PID, SIG), aby sprawdzić dostępność identyfikatora procesu.

Importuj OS DEF is_process_running (proces_Spokresowy): Spróbuj: OS.Kill (proces_Id, 0) Zwróć PRAWDA Z wyjątkiem Osperror: Powrót Fałsz

Edytuj: Uwaga: OS.Kill działa w systemie Windows (z Python 2.7) i OS.GetPgid nie będzie . Ale wersja Windows. Powoduje, że terminacja (), która "bezwarunkowana proces bezwarunkowo", więc przewidywam, że nie będzie bezpiecznie zwrócić potrzebnych informacji, w rzeczywistości bez zabicia procesu, jeśli istnieje.

Jeśli używasz systemu Windows, daj nam znać, ponieważ żaden z tych rozwiązań nie jest dopuszczalny w tym scenariuszu.

Możesz sprawdzić, czy istnieje folder / proc /.

\u003e\u003e\u003e Importuj OS.Path \u003e\u003e\u003e OS.Path.exists ("/ PROC / 0") Fałsz \u003e\u003e\u003e OS.Path.exists ("/ Proc / 12") Prawda

Zobacz: Jak sprawdzać Linuksa z Python, jeśli proces nadal działa?

Jeśli nie masz nic przeciwko za pomocą modułu zewnętrznego, sugerowałbym psutil. Jest to platforma krzyżowa i łatwa w użyciu niż łódź podwodna odradza tylko w celu wyszukiwania bieżącego procesu.

Jeśli ten proces należy do tego samego użytkownika, proces sprawdzenia, możesz spróbować go zabić. Jeśli używasz A 0, Zabij nie wyśle \u200b\u200bniczego, ale nadal daj ci znać, jeśli ten proces jest dostępny.

Jeśli SIG ma 0, sygnał nie jest wysyłany, ale kontrola błędów jest nadal wykonywana; Można to wykorzystać do sprawdzenia obecności identyfikatora procesu lub identyfikatora grupy procesowej.

Powinno to odpowiednio rozprzestrzeniać się na metody Pythona.

Wiem, że jest stary, ale używałem go i wydaje się pracować; Możesz szybko dostosować się do konwersji z nazwy procesu do identyfikatora procesu:

Spróbuj: Jeśli Len (os.popen ("PS -AEF | GREP -I" MYPROCESS "| GREP -V" GREP "| awk" (Drukuj 3 USD ""). Czytaj (). Pasek (). Split (" n "))\u003e 1: Podnieś SystemExit (0) z wyjątkiem wyjątku, E: Podnieś e

W systemie Windows inną opcją jest użycie tablicy zadań.exe:

Składnia: Task Distlist.exe / NH / FI "PID EQ PRESSID"

Def isprocessruning (processid): PS \u003d subprocess.popen (R "Task Listist.exe / NH / FI" PID EQ% D ""% (processid), Shell \u003d true, Stdout \u003d subprocess.pipe) Wyjście \u003d PS.Stdout.Read.Read.Read. () PS.STDOUT.Close () PS.Wait (), jeśli procesy procesów: powrót True Powrót False

Możesz użyć WMI w systemie Windows.

Z Win32Com.Client Import GetObject GetObject ("WinmgMTS:"). Wykonywanie ("Wybierz * z Win32_Process, gdzie processid \u003d" + Str (PID)). Liczba

Możesz także użyć innych filtrów. Na przykład, najprawdopodobniej chcę tylko powiedzieć, czy proces działa według nazwy i podejmuje się. Na przykład, jeśli DBGView nie zostanie uruchomiony, uruchom go.

Jeśli nie GetObject ("WinmgMTS:"). Wykonawca ("Wybierz * z Win32_Process, gdzie nazwa \u003d" dbgview.exe ""). Liczba: subprocess.popen (R "C:

Możesz także uporządkować i robić inne interesujące rzeczy. Pełna lista Pola są tutaj.

Niedawno musiałem wymienić aktualne procesy i tak:

Def Check_Pulce (proces): Importuj refundacja subprocesów przywracania ): Reflektprocess \u003d true, jeśli retripprocess \u003d\u003d false: Drukuj "Brak procesu wykonywania" Jeśli retripprocess \u003d\u003d True: Drukuj "Proces wykonania"

Musisz go znaleźć dwa razy.

ps -ef |. GREP 71676 |. Sed "s / 71676 //" | GREP 71676.

Jeśli wróci, to naprawdę działa!

Lubię narzędzia WMIC i listy zadań, ale nie są one dostępne w domu / głównych wersjach systemu Windows. Innym sposobem jest użycie komendy qprocess dostępnej prawie wszystkie maszyny Windows (dla tych, które mają usługi terminalowe - myślę, że tylko wygrać XP bez SP2, więc praktycznie wszyscy komputer z systemem Windows.):

@echo Off: Check_Process SetLocal Jeśli "% ~ 1" Equ "" Echo przekazuje nazwę procesu jako Forst Argument && Exit / B 1 :: Pierwszy argument jest procesem, który chcesz sprawdzić, czy uruchomiony zestaw procesów_to_Check \u003d% ~ 1 :: qprocess Może wyświetlać tylko pierwsze 12 symboli procesu uruchomienia :: Jeśli używane jest inne narzędzie, linia poniżej może zostać usunięta Ustaw proces_to_check \u003d% procesu_to_check: ~ 0,12% qprocess * | Znajdź / I "% Process_to_Check%"\u003e Nul 2\u003e

Qprocess. Polecenie nie jest tak silne jak lista zadań i jest ograniczona do wyświetlania tylko 12 znaków nazwa procesu, ale należy wziąć pod uwagę, czy lista zadań nie jest dostępna.

Bardziej proste użycie, gdy używa nazwy Jeśli proces jest jako argument (przyrostek.exe jest obowiązkowy w tym przypadku, gdy przekazujesz nazwę wykonywalną):

@echo Off: Check_Process SetLocal Jeśli "% ~ 1" EQU "" Echo przekazuje nazwę procesu jako Forst Argument && Exit / B 1 :: Pierwszy argument jest procesem, który chcesz sprawdzić, czy działa :: .exe przyrostek jest ustawiony " Process_to_check \u003d% ~ 1 "qprocess"% proces_to_check% "\u003e nul 2\u003e & 1 && (echo Process% proces_to_Check% jest uruchomiony) || (Proces echa% proces_to_check% nie działa) endlocal

Różnica między dwoma sposobami korzystania z QProcess jest to, że qprocess * wyświetla wszystkie procesy, a qprocess some.exe będzie filtrować tylko procesy dla bieżącego użytkownika.

Korzystanie z obiektów WMI za pośrednictwem Windows Script Host Exe zamiast WMIC jest również opcją. Należy również uruchomić na wszystkich maszynach Windows (z wyłączeniem tych, w których jest wyłączony WSH, ale jest to rzadki przypadek). Oto plik batowy, który wymienia wszystkie procesy za pomocą klas WMI i można go używać zamiast qprocess w skrypcie powyżej (jest to hybryd jscript / bat i musi zostać zapisany jako .bat):

@if (@x) \u003d\u003d (@ y) @end / * JScript Comment ** @echo Off Cscript // E: JScript // Nologo "% ~ F0" Exit / B ********** **** Koniec komentarza jscriptowego ** / var winmgmts \u003d getObject ("winmgmts: \\\\\\\\. Root CIMV2"); var colprocess \u003d winmgmts.execquery ("Wybierz * z Win32_Process"); Procesy VAR \u003d Nowy Eniorator (Colprocess); dla (;! procesy.tend (); procesy.movenext ()) (Var Process \u003d procesy.Item (); Wscript.echo (proces.Processid + "+ proces.

I modyfikacja, która sprawdzi, czy uruchomiony proces:

@if (@x) \u003d\u003d (@ y) @end / * jscript Komentarz ** @echo Off Jeśli "% ~ 1" EQU "" Echo przekazuje nazwę procesu jako Forst Argument & & Exit / B 1 :: Pierwszy argument Proces, który chcesz sprawdzić, czy uruchomiony zestaw procesu_to_check \u003d% ~ 1 CScript // E: JScript // Nologo "% ~ F0" | Znajdź / I "% Process_to_Check%"\u003e Nul 2\u003e & 1 && (proces echo% proces_to_Check% jest uruchomiony) || (Echo Proces% proces_to_check% nie działa) Wyjście / b ************** Koniec jscript Komentarz ** / var winmgMts \u003d GetObject ("WinmgMTS: \\\\\\\\ CIMV2 "); var colprocess \u003d winmgmts.execquery ("Wybierz * z Win32_Process"); Procesy VAR \u003d Nowy Eniorator (Colprocess); dla (;! Processes.tend (); procesy.Movenext ()) (Var Process \u003d procesy.Item (); Wscript.echo (proces.Processid + "+ Process.Name);)

Te dwa parametry mogą być używane na maszynach bez listy zadań.

Końcowa technika używa MSHTA. Będzie działać na wszystkich maszynach Windows z XP i powyżej i nie zależy od ustawienia systemu Windows. scenariusz. Zadzwoń MSHTA może nieznacznie zmniejszyć wydajność (ponownie, musisz zaoszczędzić jako BAT):

@if (@x) \u003d\u003d (@ y) @end / * jscript komentarz ** @echo Off SetLocal Jeśli "% ~ 1" Equ "" Echo przekazuje nazwę procesu jako Forst Argument && Exit / B 1 :: Pierwszy argument Czy proces, który chcesz sprawdzić, czy ustawienie uruchomienia procesu_to_check \u003d% ~ 1 MSHTA "O:"| Znajdź / I"% Process_to_Check% "\u003e Nul 2\u003e & 1 && (proces echo% procesu_to_Check% jest uruchomiony) || (proces echo% proces_to_check% nie działa) Endlocal Exit / B ******** * ***** Koniec komentarza JScript ** / Var FSO \u003d Nowy ActiveXObject ("Scripting.FilesystemObject"). GetstandasStream (1); var winmgmts \u003d GetObject ("WinmgMts: \\\\\\\\. Root Cimv2 "); var colprocess \u003d winmgmts.execquery (" Wybierz * z Win32_Process "); Var Procesy \u003d Nowy Enimerator (Colprocess); dla (;! Processes.ateend (); procesy ); Fso.write (proces.processid + "+ proces.name +" n ");) blisko ();

Dzwon.

Są ci, którzy przeczytali tę wiadomość przed tobą.
Subskrybuj odbieranie artykułów świeżych.
E-mail
Nazwa
Nazwisko
Jak chcesz przeczytać dzwonek
Bez spamu