Tratează un mesaj despre un ajutor care rulează deja ca pe un indiciu de ciclu de viață, nu ca pe o permisiune de a începe să omori procese. Pasul periculos nu este oprirea în sine, ci identificarea dinaintea ei, pentru că pe un singur Mac pot exista mai multe componente cu nume similare și doar una dintre ele deține conexiunea. Construiește mai întâi înregistrarea de identitate. Apoi hotărăște dacă oprirea este chiar acțiunea potrivită.

Construiește o înregistrare de identitate înainte de a acționa

Patru fapte fac un proces identificabil: PID-ul curent cu ora de pornire, executabilul și produsul din care face parte, utilizatorul sau contextul de privilegii în care rulează și ceea ce l-a pornit. ps -o pid,ppid,user,etime,command -p 1234 îți dă primele trei pe o singură linie, inclusiv de cât timp procesul este viu. Monitorul de activitate arată aceleași informații într-o formă mai prietenoasă. Adaugă controlerul, adică aplicația sau serviciul responsabil cu pornirea și oprirea lui. Cu aceste patru, un proces încetează să mai fie un nume și devine un obiect despre care poți raționa.

Dacă unul dintre cele patru este necunoscut, oprește-te acolo. O componentă necunoscută este o întrebare pentru editor sau administrator, nu un experiment.

PID-ul dintr-un jurnal vechi aparține acum altcuiva

ID-urile de proces sunt reciclate, iar un număr copiat din jurnalul de ieri poate indica acum ceva complet fără legătură. Compară ora de pornire cu marcajul de timp din jurnal înainte de a trage vreo concluzie. Același lucru este valabil pentru un nume scurt: două versiuni ale unui produs pot livra ajutoare cu nume identice și scopuri diferite. Identitatea este tuplul, niciodată doar numărul.

Separă rolurile înainte de a atinge orice altceva. Clientul unei singure conexiuni, un ajutor partajat care deservește mai multe aplicații și un server care acceptă sesiunile altora arată toate ca un proces din fundal într-o listă. Doar unul dintre ele poate fi oprit fără consecințe pe care nu le-ai luat în calcul.

Oprește prin proprietar, nu prin semnal

Începe cu controlul care deține lucrul: butonul Deconectare al conexiunii, comanda de oprire acceptată a serviciului sau acțiunea proprie a agentului de administrare. Aceste căi execută demontarea pe care produsul o așteaptă, care include eliminarea rutelor și închiderea dispozitivului de tunel. Un semnal sare peste toate acestea și lasă stare în urmă.

Privește ce rămâne după aceea. Un proces care rămâne rezident poate aștepta următoarea conexiune, ceea ce este o alegere de proiectare și nu o oprire eșuată.

De ce un supraveghetor repornește ceea ce ai omorât

Dacă un demon de lansare sau o politică de conectare automată vrea tunelul activ, omorârea procesului nu exprimă nimic. Supraveghetorul vede ieșirea și îl pornește din nou, uneori înainte să termini de citit jurnalul.

Găsește supraveghetorul înainte de a lupta cu el. launchctl list arată sarcinile încărcate și etichetele lor, iar o sarcină cu setare keep-alive repornește la ieșire, prin proiectare. Acțiunea corectă acolo este să schimbi intenția: descarcă sarcina, dezactivează politica de conectare automată sau roagă administratorul să facă asta. Închiderea forțată este un alt instrument cu altă semnificație și aparține unei proceduri de recuperare documentate pentru un proces blocat, nu administrării curente a conexiunilor.

Înregistrează evenimentul de ciclu de viață, nu omorârea

Notează identitatea componentei, versiunea clientului, primul eveniment relevant din ciclul de viață și ce ai făcut. Evenimentul contează mai mult decât acțiunea, pentru că două instanțe care apar la autentificare sunt o problemă de ordonare la pornire care va reveni. O înregistrare care numește executabilul și controlerul său îi permite următoarei persoane să reproducă problema.

Apoi verifică starea dorită: serviciul de care utilizatorul avea nevoie și resursa privată la care ajunge. Evită conducta care caută un subșir și închide forțat fiecare potrivire, pentru că aruncă tot ce am spus mai sus și de obicei distruge dovada motivului pentru care existau două instanțe. Dacă procesul continuă să revină, constatarea este un defect de configurare sau de ordonare, iar remedierea aparține celui care deține comportamentul de pornire al clientului.

Articole similare