Poruku o pomoćniku koji već radi tretirajte kao trag o životnom ciklusu, a ne kao dopuštenje da počnete ubijati procese. Opasan korak nije samo zaustavljanje, nego identifikacija prije njega, jer na jednom Macu može postojati nekoliko komponenti sličnih imena i samo jedna od njih posjeduje vezu. Prvo sastavite zapis o identitetu. Zatim odlučite je li zaustavljanje uopće prava radnja.

Sastavite zapis o identitetu prije nego što djelujete

Četiri činjenice čine proces prepoznatljivim: trenutačni PID s vremenom pokretanja, izvršna datoteka i proizvod kojem pripada, korisnik ili kontekst privilegija pod kojim radi, i ono što ga je pokrenulo. ps -o pid,ppid,user,etime,command -p 1234 daje vam prve tri u jednom retku, uključujući koliko dugo proces živi. Nadzornik aktivnosti pokazuje iste podatke na pristupačniji način. Dodajte kontroler, to jest aplikaciju ili uslugu odgovornu za njegovo pokretanje i zaustavljanje. S te četiri, proces prestaje biti ime i postaje objekt o kojem se može razmišljati.

Ako je jedna od te četiri nepoznata, zaustavite se tu. Nepoznata komponenta je pitanje za izdavača ili administratora, a ne eksperiment.

PID u starom zapisu sada pripada nekom drugom

ID-ovi procesa se recikliraju, a broj kopiran iz jučerašnjeg zapisa može sada pokazivati na nešto potpuno nepovezano. Usporedite vrijeme pokretanja s vremenskom oznakom u zapisu prije nego što donesete bilo kakav zaključak. Isto vrijedi i za kratko ime: dvije gradnje jednog proizvoda mogu isporučiti pomoćnike s identičnim imenima i različitim namjenama. Identitet je torka, nikada samo broj.

Razdvojite uloge prije nego što dotaknete bilo što drugo. Klijent jedne veze, zajednički pomoćnik koji služi nekoliko aplikacija i poslužitelj koji prihvaća tuđe sesije u popisu izgledaju kao pozadinski proces. Samo se jedan od njih može zaustaviti bez posljedica koje niste razmotrili.

Zaustavite kroz vlasnika, ne kroz signal

Počnite s kontrolom koja posjeduje stvar: gumbom za odspajanje veze, podržanom naredbom usluge za zaustavljanje ili vlastitom radnjom agenta za upravljanje. Ti putevi izvode demontažu koju proizvod očekuje, uključujući uklanjanje ruta i zatvaranje tunelskog uređaja. Signal sve to preskače i ostavlja stanje za sobom.

Pogledajte što ostaje nakon toga. Proces koji ostane u memoriji možda čeka sljedeću vezu, što je dizajnerski izbor, a ne neuspjelo zaustavljanje.

Zašto nadzornik ponovno pokreće ono što ste ubili

Ako launch daemon ili pravilo automatskog povezivanja želi da tunel bude aktivan, ubijanje procesa ništa ne izražava. Nadzornik vidi izlaz i ponovno ga pokreće, ponekad prije nego što završite čitanje zapisa.

Nađite nadzornika prije nego što se s njim sukobite. launchctl list prikazuje učitane poslove i njihove oznake, a posao s postavkom keep-alive ponovno se pokreće pri izlazu, po dizajnu. Ispravna radnja je promijeniti namjeru: iskrcajte posao, isključite pravilo automatskog povezivanja ili zamolite administratora da to učini. Prisilno zatvaranje drugi je alat s drugim značenjem i pripada dokumentiranom postupku oporavka zaglavljenog procesa, a ne rutinskom upravljanju vezama.

Zabilježite događaj životnog ciklusa, a ne ubijanje

Zapišite identitet komponente, verziju klijenta, prvi relevantni događaj životnog ciklusa i što ste učinili. Događaj je važniji od radnje, jer dvije instance koje se pojavljuju pri prijavi predstavljaju problem redoslijeda pokretanja koji će se ponoviti. Zapis koji imenuje izvršnu datoteku i njezin kontroler omogućuje sljedećoj osobi da to reproducira.

Zatim provjerite željeno stanje: uslugu koja je korisniku trebala i privatni resurs do kojeg ona doseže. Izbjegnite niz koji traži podniz i prisilno ubija svako podudaranje, jer odbacuje sve gore navedeno i obično uništava dokaz zašto su postojale dvije instance. Ako se proces stalno vraća, nalaz je greška u konfiguraciji ili redoslijedu, a ispravak pripada onome tko upravlja ponašanjem klijenta pri pokretanju.

Povezani članci