
特別な問題があります。私のサーバーは、複数の管理者がコマンドラインインターフェースを介して同時に管理できるように、複数のSSHセッションを同時にサポートしています。圧縮ログファイルを表示するコマンドがありますztail
。現在のSSHセッションが閉じられたら、理想的にはコマンドが動作を停止する必要があります(コマンドを停止するためにCtrl-を押す必要はありません)。ただし、新しいSSHセッションを開始すると、以前のセッションが閉じられたにもかかわらず、プロセス()がまだバックグラウンドで実行され、CPUを消費していることがわかります。これで、その変数/フラグを使用して、以前に閉じられたセッションで開始されたコマンドを閉じるか停止できるように、セッションがいつ閉じられたかをどうやって知ることができますか?Cztail
ztail
答え1
これは、たとえばバックグラウンドで、またはcronを介して新しいルートレベルプロセス(つまり親プロセスなし)で実行(または他のコマンド)ztail
する場合にのみ発生します。
通常、標準セッションを開始すると、起動するすべてのssh
プログラムのルートプロセスであるシェルプロセスが作成されます。ssh
セッションが終了すると、カーネルはすべての子プロセスも終了します。 (これが人々が通常screen
持続セッションに似たものを使用する理由です。)
したがって、最も簡単な方法はこの基本的な動作を活用することです。ルートプロセスがps axjf
何であるかを確認し、ztail
終了したセッションssh
で生き残った理由を学びます。
答え2
SSHセッション中、シェルセッションは子プロセスになります。このサブプロセスには別のサブプロセスがありますztail
。 ztailはシェルを閉じた後に親アイテムを失います。これらすべてのプロセスと同様に、PID 1を使用してinitによって実行されます。
親pidがztail
1の場合、「ゾンビ」の1つである可能性が高くなります。