W przypadku scenariuszy testowania katastrof w środowisku serwera szukamy łatwego sposobu, aby proces utknął w stanie D (nieprzerwany sen).
Jakieś proste sposoby? Przykładowy kod C byłby plusem :)
Edycja - pierwsza odpowiedź jest częściowo poprawna, ponieważ proces jest w stanie D, ale nadal odbiera sygnały i może zostać zabity
process
process-management
benchmark
er453r
źródło
źródło
Odpowiedzi:
Miałem ten sam problem i rozwiązałem go, tworząc moduł jądra, który utknął w stanie D.
Ponieważ nie mam żadnego doświadczenia w modułach, wziąłem kod z tego turorialu z pewnymi modyfikacjami znalezionymi gdzieś w esle .
Rezultatem jest urządzenie w / dev / memory, które zacina się podczas odczytu, ale można go obudzić, pisząc na nim (potrzebuje dwóch zapisów, nie wiem dlaczego, ale mnie to nie obchodzi).
Aby go użyć, po prostu:
Aby odblokować, z innego terminala:
Makefile:
Kod pamięci. C:
źródło
Od https://blogs.oracle.com/ksplice/entry/disown_zombie_children_and_the
Proces jest wprowadzany w nieprzerwany sen,
(STAT D)
gdy musi na coś czekać (zwykle we / wy) i nie powinien obsługiwać sygnałów podczas oczekiwania. Oznacza to, że nie możesz tegokill
zrobić, ponieważ wszystko, co zabija, to wysyłanie sygnałów. Może się to zdarzyć w prawdziwym świecie, jeśli odłączysz serwer NFS, podczas gdy inne komputery mają do niego otwarte połączenia sieciowe.Możemy stworzyć własne nieprzerwane procesy o ograniczonym czasie trwania, wykorzystując
vfork
wywołanie systemowe.vfork
jest jakfork
, ale przestrzeń adresowa nie jest kopiowana od rodzica do dziecka, w oczekiwaniu na taki,exec
który po prostu wyrzuci skopiowane dane. Dogodnie dla nas, gdyvfork
rodzic czeka nieprzerwanie (w drodzewait_on_completion
) na dzieckoexec
lubexit
:Widzimy dziecko (
PID 1973, PPID 1972
) we śnie przerywanym, a rodzic (PID 1972, PPID 13291
- skorupkę) podczas nieprzerwanego snu, podczas gdy dziecko czeka 60 sekund.Jedną zgrabną (psotną?) Cechą tego skryptu jest to, że procesy w nieprzerwanym trybie uśpienia przyczyniają się do średniej obciążenia komputera. Możesz więc uruchomić ten skrypt 100 razy, aby tymczasowo nadać maszynie średnią wartość obciążenia podwyższoną o 100, jak podaje
uptime
.źródło
kill
: /Zasadniczo nie możesz. Przeczytaj ten artykuł, zatytułowany: TASK_KILLABLE: nowy stan procesu w systemie Linux .
fragmentTo SO Pytania i odpowiedzi zatytułowane: Co to jest nieprzerwany proces? wyjaśnia to również.
Odkryłem to w bardzo interesującej książce zatytułowanej: Interfejs programistyczny systemu Linux: Podręcznik programowania systemu Linux i UNIX .
źródło
TASK_KILLABLE
stanu.