Žinutę apie jau veikiantį pagalbininką traktuokite kaip gyvavimo ciklo užuominą, o ne kaip leidimą pradėti žudyti procesus. Pavojingas žingsnis yra ne pats stabdymas, o identifikavimas prieš jį, nes viename Mac gali būti keli panašiais pavadinimais komponentai ir tik vienas jų valdo ryšį. Pirmiausia sukurkite tapatybės įrašą. Tada nuspręskite, ar stabdymas apskritai yra teisingas veiksmas.

Sukurkite tapatybės įrašą prieš imdamiesi veiksmų

Keturi faktai daro procesą atpažįstamą: dabartinis PID su jo paleidimo laiku, vykdomasis failas ir produktas, kuriam jis priklauso, vartotojo ar privilegijų kontekstas, kuriame jis veikia, ir viskas, kas jį paleido. ps -o pid,ppid,user,etime,command -p 1234 pateikia pirmuosius tris vienoje eilutėje, įskaitant tai, kiek laiko procesas gyvas. Activity Monitor rodo tą pačią informaciją draugiškesniu veidu. Pridėkite valdiklį, tai yra programą ar paslaugą, atsakingą už jo paleidimą ir stabdymą. Su šiais keturiais procesas nustoja būti pavadinimu ir tampa objektu, apie kurį galite mąstyti.

Jei vienas iš keturių nežinomas, sustokite ten. Nežinomas komponentas yra klausimas leidėjui ar administratoriui, o ne eksperimentas.

PID sename žurnale dabar priklauso kam nors kitam

Procesų ID yra perdirbami, o numeris, nukopijuotas iš vakar dienos žurnalo, dabar gali rodyti į visiškai nesusijusį dalyką. Prieš darydami bet kokią išvadą palyginkite paleidimo laiką su žurnalo laiko žyma. Tas pats galioja trumpam pavadinimui: du vieno produkto leidimai gali siųsti pagalbininkus su vienodais pavadinimais ir skirtingomis paskirtimis. Tapatybė yra kortežas, niekada vien tik numeris.

Atskirkite vaidmenis prieš ką nors kitą liesdami. Vieno ryšio klientas, bendras pagalbininkas, aptarnaujantis kelias programas, ir serveris, priimantis kitų žmonių sesijas, sąraše visi atrodo kaip foninis procesas. Tik vieną iš jų galima sustabdyti be pasekmių, kurių neapsvarstėte.

Stabdykite per savininką, o ne per signalą

Pradėkite nuo valdiklio, kuris valdo daiktą: ryšio mygtuko Atjungti, palaikomos paslaugos stabdymo komandos ar paties valdymo agento veiksmo. Tie keliai atlieka produkto laukiamą išardymą, įskaitant maršrutų pašalinimą ir tunelio įrenginio uždarymą. Signalas visa tai praleidžia ir palieka būseną.

Stebėkite, kas lieka po to. Atmintyje likęs procesas gali laukti kito ryšio, ir tai yra dizaino pasirinkimas, o ne nepavykęs stabdymas.

Kodėl prižiūrėtojas paleidžia iš naujo tai, ką nužudėte

Jei paleidimo demonas ar automatinio prisijungimo politika numato, kad tunelis turi būti įjungtas, proceso žudymas nieko neišreiškia. Prižiūrėtojas mato išėjimą ir vėl jį paleidžia, kartais dar prieš jums baigiant skaityti žurnalą.

Raskite prižiūrėtoją prieš su juo kovodami. launchctl list rodo įkeltas užduotis ir jų etiketes, o užduotis su gyvybės palaikymo nustatymu išėjus paleidžiama iš naujo pagal dizainą. Teisingas veiksmas ten yra pakeisti ketinimą: iškelti užduotį, išjungti automatinio prisijungimo politiką arba paprašyti administratoriaus tai padaryti. Priverstinis uždarymas yra kitas įrankis su kita prasme, ir jis priklauso dokumentuotai įstrigusio proceso atkūrimo procedūrai, o ne įprastam ryšių valdymui.

Užfiksuokite gyvavimo ciklo įvykį, o ne nužudymą

Užrašykite komponento tapatybę, kliento versiją, pirmą svarbų gyvavimo ciklo įvykį ir tai, ką padarėte. Įvykis svarbesnis už veiksmą, nes du egzemplioriai prisijungimo metu yra paleidimo tvarkos problema, kuri pasikartos. Įrašas, nurodantis vykdomąjį failą ir jo valdiklį, leidžia kitam žmogui tai atkurti.

Tada patikrinkite numatytą būseną: paslaugą, kurios vartotojui reikėjo, ir privatų išteklių, kurį ji pasiekia. Venkite grandinės, kuri ieško poeilutės ir priverstinai žudo kiekvieną atitikmenį, nes ji atmeta visa tai, kas išdėstyta aukščiau, ir paprastai sunaikina įrodymą, kodėl buvo du egzemplioriai. Jei procesas vis grįžta, radinys yra konfigūracijos ar tvarkos defektas, o taisymas priklauso tam, kuris valdo kliento paleidimo elgseną.

Susiję straipsniai