すでに動作しているヘルパーについてのメッセージは、プロセスを殺し始める許可ではなく、ライフサイクルの手がかりとして扱います。危険なのは停止そのものではなく、その前の特定です。同じ Mac 上に似た名前の部品が複数存在し、接続を所有しているのは一つだけだからです。まず識別記録を作り、そのうえで停止がそもそも正しい行為かを決めます。

行動する前に識別記録を作る

四つの事実がプロセスを識別可能にします。現在の PID とその開始時刻、属している実行ファイルと製品、動作しているユーザーや権限の文脈、そして何がそれを起動したかです。ps -o pid,ppid,user,etime,command -p 1234 は最初の三つを一行で示し、プロセスがどれだけ生きているかも含みます。Activity Monitor は同じ情報をより親しみやすい画面で見せます。制御元、つまり起動と停止を担うアプリケーションやサービスを加えれば、この四つでプロセスは名前ではなく、考察できる対象になります。

四つのうち一つでも不明なら、そこで止めます。未知の部品は発行元や管理者への問いであり、実験ではありません。

古いログの PID は、いまは別人のもの

プロセス ID は再利用されるため、昨日のログからコピーした番号が、いまはまったく無関係なものを指していることがあります。結論を出す前に、開始時刻をログのタイムスタンプと照合します。短い名前も同じで、同じ製品の二つのビルドが、同じ名前で別の目的を持つヘルパーを同梱することがあります。同一性は組であって、決して番号だけではありません。

ほかの何かに触れる前に役割を分けます。単一の接続のクライアント、複数のアプリケーションにサービスを提供する共有ヘルパー、他人のセッションを受け入れるサーバーは、どれも一覧ではバックグラウンドプロセスに見えます。検討していない影響なしに停止できるのは、そのうち一つだけです。

シグナルではなく所有者を通じて停止する

そのものを所有する操作、つまり接続の切断ボタン、サービスが対応する停止コマンド、管理エージェント自身の操作から始めます。これらの経路は製品が想定する解体を実行し、ルートの削除やトンネルデバイスのクローズを含みます。シグナルはそれをすべて飛ばし、状態を残します。

その後に何が残るかを見ます。 常駐し続けるプロセスは、次の接続を待っているのかもしれません、これは失敗した停止ではなく、設計上の選択です。

スーパーバイザーが、殺したものを再起動する理由

起動デーモンや自動接続ポリシーがトンネルを上げたままにする意図なら、プロセスを殺しても何も表明しません。スーパーバイザーは終了を見て、ログを読み終える前にさえ再び起動します。

戦う前にスーパーバイザーを見つけます。launchctl list は読み込まれたジョブとそのラベルを示し、キープアライブ設定のあるジョブは設計どおり終了時に再起動します。そこで正しい行為は意図を変えることで、ジョブをアンロードする、自動接続ポリシーを無効にする、または管理者にそう依頼します。強制終了は意味の異なる別の道具であり、硬直したプロセスの文書化された復旧手順に属するものであって、日常の接続管理ではありません。

殺したことではなく、ライフサイクルの出来事を記録する

部品の同一性、クライアントのバージョン、最初の重要なライフサイクルイベント、そして何をしたかを書き留めます。出来事は行為より重要で、ログイン時に二つのインスタンスが現れるのは繰り返す起動順序の問題だからです。実行ファイルとその制御元を名指す記録があれば、次の人が再現できます。

次に意図した状態、つまり利用者が必要としたサービスと、それが到達する非公開の資源を検証します。部分文字列を grep して一致するものをすべて強制終了するパイプラインは、上述のすべてを捨て、二つのインスタンスが存在した理由の証拠をたいてい破壊するので避けます。プロセスが戻り続けるなら、所見は構成か順序の欠陥であり、修正はクライアントの起動挙動を所有する側の仕事です。

関連記事