Вызначце памочніка VPN на Mac, перш чым забіваць працэс
Супутніце працэс VPN з яго выканальным файлам, кантролерам і сеткавай роляй, перш чым спыніць яго, потым выкарыстайце шлях спынення ўладальніка, а не сігнал.
Стаўцеся да паведамлення пра памочніка, які ўжо запушчаны, як да падказкі пра жыццёвы цыкл, а не як да дазволу пачаць забіваць працэсы. Небяспечны крок — не само спыненне, а ідэнтыфікацыя перад ім, бо некалькі кампанентаў з падобнымі назвамі могуць існаваць на адным Mac, і толькі адзін з іх валодае злучэннем. Спачатку пабудуйце запіс асобы. Затым вырашыце, ці спыненне ўвогуле з'яўляецца правільным дзеяннем.
Пабудуйце запіс асобы, перш чым дзейнічаць
Чатыры факты робяць працэс пазнавальным: бягучы PID з часам запуску, выканальны файл і прадукт, да якога ён належыць, кантэкст карыстальніка або прывілеяў, у якім ён працуе, і тое, што яго запусціла. ps -o pid,ppid,user,etime,command -p 1234 дае першыя тры ў адным радку, уключаючы, колькі часу працэс ужо жыве. Activity Monitor паказвае тую ж інфармацыю з больш прыязным выглядам. Дадайце кантролер, гэта значыць праграму або службу, адказную за яго запуск і спыненне. З гэтымі чатырма працэс перастае быць назвай і становіцца аб'ектам, пра які можна разважаць.
Калі адзін з чатырох невядомы, спыніцеся там. Незнаёмы кампанент — гэта пытанне да выдаўца або адміністратара, а не эксперымент.
PID са старога журнала цяпер належыць камусьці іншаму
Ідэнтыфікатары працэсаў перапрацоўваюцца, і нумар, скапіраваны з учарашняга журнала, можа цяпер паказваць на нешта цалкам незвязанае. Параўнайце час запуску з адзнакай часу журнала, перш чым рабіць любую выснову. Тое ж датычыцца кароткай назвы: два выпускі аднаго прадукту могуць пастаўляць памочнікаў з аднолькавымі назвамі і рознымі мэтамі. Асоба — гэта картэж, ніколі не адзін нумар.
Аддзяліце ролі, перш чым кранаць што-небудзь яшчэ. Кліент аднаго злучэння, агульны памочнік, які абслугоўвае некалькі праграм, і сервер, што прымае сеансы іншых людзей, усе выглядаюць як фонавы працэс у спісе. Толькі адзін з іх можна спыніць без наступстваў, якія вы не ўлічылі.
Спыняйце праз уладальніка, а не праз сігнал
Пачніце з элемента кіравання, які валодае рэччу: кнопкі «Адключыць» злучэння, падтрыманай каманды спынення службы або ўласнага дзеяння агента кіравання. Гэтыя шляхі выконваюць дэмантаж, якога чакае прадукт, уключаючы выдаленне маршрутаў і закрыццё прылады тунеля. Сігнал прапускае ўсё гэта і пакідае стан пасля сябе.
Паглядзіце, што застаецца пасля. Працэс, які застаецца ў памяці, можа чакаць наступнага злучэння, і гэта хутчэй выбар дызайну, чым няўдалае спыненне.
Чаму супервізар перазапускае тое, што вы забілі
Калі launch-дэман або палітыка аўтападключэння мае на ўвазе, што тунель павінен быць уключаны, забойства працэсу нічога не выяўляе. Супервізар бачыць выхад і запускае яго зноў, часам перш, чым вы дачытаеце журнал.
Знайдзіце супервізара, перш чым змагацца з ім. launchctl list паказвае загружаныя заданні і іх пазнакі, а заданне з наладай захавання жыцця перазапускаецца пры выхадзе па задуме. Правільнае дзеянне там — змяніць намер: выгрузіце заданне, адключыце палітыку аўтападключэння або папрасіце адміністратара зрабіць гэта. Прымусовае закрыццё — іншы інструмент з іншым сэнсам, і ён належыць да дакументаванай працэдуры аднаўлення для заклінаванага працэсу, а не да руціннага кіравання злучэннямі.
Запішыце падзею жыццёвага цыклу, а не забойства
Запішыце асобу кампанента, версію кліента, першую значную падзею жыццёвага цыклу і тое, што вы зрабілі. Падзея важнейшая за дзеянне, бо два экзэмпляры, што з'яўляюцца пры ўваходзе, — гэта праблема парадку запуску, якая будзе паўтарацца. Запіс з выканальным файлам і яго кантролерам дазволіць наступнаму чалавеку ўзнавіць гэта.
Затым праверце меркаваны стан: службу, патрэбную карыстальніку, і прыватны рэсурс, да якога яна дасягае. Пазбягайце канвеера, які шукае падрадок і гвалтоўна забівае кожнае супадзенне, бо ён адкідвае ўсё вышэйсказанае і звычайна знішчае доказы таго, чаму існавалі два экзэмпляры. Калі працэс вяртаецца, знаходка — гэта дэфект канфігурацыі або парадку, і выпраўленне належыць таму, хто валодае паводзінамі запуску кліента.