Projekt Shell - usterka z quit?

Projekt Shell - usterka z quit?

Napisane przez: Maksymilian Czudziak ()
Liczba odpowiedzi: 2

Nie jestem pewien jak powinno działać quit gdy coś działa w tle naszego shella.

Mój "test" to:

 

sl

<ctrl+Z>

quit

 

Shell_v1 od razu wychodził (wysyłał sigterm nie przejmując się?).

Shell_v2 wisi... jak dałem później "bg" i znowu "quit" to znowu zawisł... Co więcej, przy "bg" shell powiedział, że sl kontynuuje działanie, a po 1."quit" 2. <ctrl+c> 3. "jobs" jest on w stanie suspended.

 

W sumie to po prostu chciałbym się dowiedzieć jak powinno być. Czy mam w swoim rozwiązaniu zreprodukować wiszącego shella, czy nie?

W odpowiedzi na Maksymilian Czudziak

Odp: Projekt Shell - usterka z quit?

Napisane przez: Krystian Bacławski ()

Dla Shell_v2 polecenie quit woła shutdownjobs, co jest zamierzone.

W opisanym przypadku problem leży oczywiście w shell, ale jest dość subtelny. Ponieważ sl zostało zadaniem drugoplanowym, to w wyniku wypisywania komunikatów na terminal zostanie mu wysłany sygnał SIGTTOU, którego domyślną akcją jest wstrzymanie programu.

Nasz scenariusz wygląda następująco: najpierw wysyłamy do sl sygnał SIGTERM, potem go wznawiamy. Program obsługuje SIGTERM i próbuje coś wypisać na wyjście. Dostaje SIGTTOU i zostaje zatrzymany. Nasz shell czeka na zakończenie programu, który jest STOPPED.

Lepsze (niż bieżące) zaprogramowanie shutdownjobs zapewne musiałoby polegać na wzięciu każdego zadania drugoplanowego, wypromowaniu go do pierwszoplanowego i zawołaniu na nim killjob.