Mam skrypt Pythona, który używa poleceń SIGSTOP i .SIGCONT z os.kill, aby wstrzymać lub wznowić proces. Czy istnieje sposób na ustalenie, czy powiązany PID znajduje się w stanie wstrzymanym lub wznowionym?Czy istnieje sposób na określenie, czy PID Linuksa jest wstrzymany czy nie?
Odpowiedz
Informacje na temat procesu można znaleźć w jego katalogu/proc (/proc/<PID>
). W szczególności, można znaleźć swój bieg stan ten Pythona wyrażenia:
open(os.path.join('/proc', str(pid), 'stat')).readline().split()[2]=='T'
EDIT: To następny wyraz naprawia (prawdopodobnie rzadko) błąd z oryginału:
re.sub(r'\(.*\)', '()', open(os.path.join('/proc', str(pid), 'stat')).readline()).split()[2]=='T'
zadzwoń ps i sprawdź wartość STAT. D Bezprzerwowy tryb uśpienia (zwykle IO) R Praca lub uruchamianie (w kolejce uruchamiania) S Przerwa w trybie uśpienia (oczekiwanie na zakończenie zdarzenia) T Zatrzymany, albo przez sygnał kontroli zadania, albo dlatego, że jest śledzony. W paging (nie ważne od jądra 2.6.xx) X dead (nigdy nie powinno być widoczne) Z Proces Defunct ("zombie"), zakończony, ale nie pobrany przez jego rodzica.
Dziękuję, użyłem ps axo fname, stat, pid i który działał dokładnie tak, jak powiedziałeś, nie wiedziałem, że wartość STAT była do tego. – CobraBytez
Można użyć psuti l:
>>> import psutil
>>> pid = 1243
>>> p = psutil.Process(pid)
>>> p.status
0
>>> str(p.status)
'running'
>>> p.status == psutil.STATUS_RUNNING
True
>>>
>>> p.suspend()
>>> p.status
3
>>> str(p.status)
'stopped'
>>> p.status == psutil.STATUS_STOPPED
True
>>>
>>> p.resume()
>>> str(p.status)
'running'
>>>
Nieużywanie os.path.join! ... czekaj, to jest czyste pytanie linuksowe. – janislaw
@janislaw - dzięki. –