Niewidzialne procesy


Czasem zdarza sie tak, ze warto spojrzec glebiej do srodka systemu. Nie mam tu na mysli zadnych naprawde skomplikowanych dzialan, ale proste spojrzenie na procesy i ich aktywnosci. Narzedzi, które na to pozwalaja jest naprawde sporo. Tylko z produktów Microsoftu, wymienic mozna:

  • Task Manager – wierze, ze kazdy wie jak mozna sie ta aplikacja posluzyc, ale i tak zachecam do uzycia na mniej codzienne sposoby.
  • Process Explorer – rewelacyjne narzedzie Marka Russinovicha. Task Manager na sterydach, bez którego nie wyobrazam sobie pracy.
  • Tasklist – polecenie command line. Mimo, ze tekstowe przegladanie parametrów procesów nie nalezy do przyjemnosci, to narzedzie dobrze sprawdza sie w skryptach.
  • Pslist – kolejna aplikacja Marka Russinovicha i kolejna alternatywa dla narzedzi wbudowanych w system.
  • Get-Process – cmdlet PowerShella. Robi to samo, co poprzednie narzedzia, ale efektem dzialania nie jest okienko ani pare linii tekstu, tylko tablica obiektów typu System.Diagnostics.Process ze wszystkimi tego zaletami.
  • WinDBG – nie jest to narzedzie do przegladania listy procesów, ale potrafi to, wiec wymienic je tutaj nalezy. W normalnych warunkach, tylko do przegladania listy procesów, mozna uzyc WinDBG razem z livekd.

Osobiscie uzywam wszystkich wyzej wymienionych, zaleznie od ilosci wolnego czasu, konkretnych potrzeb i fantazji. W tej wlasnie kolejnosci.

Ostatnio, zupelnie przypadkiem (tak naprawde, od WinDBG chcialem tylko !vm) zobaczylem, ze na liscie procesów dosc czesto wystepuje notepad++. Owszem uzywam czasem tej aplikacji i na pewno uzywalem jej od ostatniego restartu (na moim laptopie to zwykle kilka tygodni), ale nic mi nie wiadomo, zeby dzialala ona w chwili obecnej. Uzylem z czystej ciekawosci i taskmgr, i procexp, i tasklist, i pslist, i Get-Process. I nic. Nikt poza WinDBG nie wie, ze mam w systemie takie procesy.

image

O co chodzi? O definicje tego, czym tak naprawde jest proces. W najwiekszym uproszczeniu jest to zbiór watków i wspóldzielona pomiedzy te watki pamiec. I ciekawie robi sie wtedy, gdy zbiór watków jest zbiorem pustym. Formalnie, proces istnieje. A tak naprawde...? To raczej kwestia filozoficzna niz techniczna. Nawet na stronach MSDN mozna znalezc rózne podejscia do tej samej kwestii. W kazdym razie, zwykle narzedzia (korzystajace ze standardowego API do pobierania listy procesów) uznaja, ze proces bez watków to nie jest cos, czym warto byloby sie zajmowac. WinDBG wyswietla dane na temat struktur w jadrze systemu i tam procesy z zerowa iloscia watków sa tak samo wazne, jak kazde inne.

Jak tego mozna uzyc w praktyce? Nie mam nawet najglupszego pomyslu. A dlaczego tak sie dzieje? Ogólnie rzeczy ujmujac, przez blad programistów danej aplikacji. Trzeba znalezc chwile czasu i napisac do nich maila. Skoro taki blad wystepuje, to prawdopodobnie o nim nie wiedza a ja uwazam, ze w zamian za swietna i bezplatna aplikacje, moge sie zrewanzowac drobna pomoca w jej udoskonaleniu.

Jezeli ktos liczyl na gotowy przepis na ukrywanie procesów, to pewnie sie zawiódl tym, co napisalem. Ale nie mialoby to wiekszego sensu dlatego, ze swietny artykul na ten temat opublikowal kilka dni temu Michal Grzegorzewski. Polecam. A u mnie dzisiaj tylko drobna ciekawostka.

Autor: Grzegorz Tworek [MVP]

Comments (4)

  1. Anonymous says:

    W jakim sensie wyzwanie? To znaczy, w jakiej sytuacji może programista chcieć coś od takiego procesu?

  2. Anonymous says:

    Wydaje mi się, że nie ma żadnej przewagi w wykorzystaniu do niecnych celów takiego procesu w porównaniu z dowolnym innym i "normalnym". Ale może czegoś nie widzę 🙂

  3. mgrzeg says:

    Taki proces bez wątku to prawdziwe wyzwanie dla programisty 🙂

  4. mgrzeg says:

    Wyzwanie w sensie pozostawienia przy życiu procesu po zamknięciu wszystkich wątków. Ja również nie mam pomysłu do czego można wykorzystać takie cudo, choć cały czas łazi mi po głowie CreateRemoteThread…

Skip to main content