Windows サーバーで SSH ログアウト後にプロセスが終了する

Windows サーバーで SSH ログアウト後にプロセスが終了する

私はWindows サーバー 2016CLIを使用するファイルをリモートで実行する必要があるマシンSSHを使用する

SSH 接続からログアウトすると、ssh ユーザーによって開始されたプロセスが終了することが知られています。Linux マシンでは、nohupまたはなどのソリューションを使用できます。screenその結果、ログオフしてもプロセスが強制終了されなくなります。

ただし、このようなソリューションは Windows マシンでは機能しないため、ログアウト後にプロセスが終了しないようにする方法を探しています。

  • 私のクライアントはUbuntuマシン
  • 私のWindows Server 2016はオープンSHH、 とパワーシェルデフォルトのシェルとして
  • 私のプログラムはデーモンモードで動作するように設定されており、cmdやpowershellウィンドウは開いたままになっていません
  • を使用すると、Get-Process -Name proc_nameプロセスが実際に実行されていることがわかります
  • Get-ProcessSSHログアウト後に使用すると、そのようなプロセスは発生しません。

私が試したこと:

  • .exeを使用してファイルを実行しますcmd
  • .batおよび.psファイルを実行しており、.exeその引数を使用して を起動します。

Windows マシンでこの問題に対処する方法はありますか?

答え1

解決策を探すのに多くの時間を費やした後、PowerShell を使用してこれを行う絶対的に正しい方法を見つけました。

これは、オンラインであまり使用されていない、またはドキュメント化されていないコマンドレットの 1 つであるように思われ、の広大な世界にすでに非常に精通していない限り、MSDN ドキュメントを使用して独自に理解することはほぼ不可能ですWmi Objects

要するに:

foo.exe引数 、 、 を使用してバックグラウンドで実行する必要があるプログラムがあると仮定すると、-a正確なコマンドを使用する必要があります。-bbar

Invoke-WmiMethod -Path 'Win32_Process' -Name Create -ArgumentList 'C:\Users\foo\Desktop\foo.exe -a -b bar'

もちろん、exe が「既知の」exe (notepad や ping などのデフォルト) であるか、自分で追加した場合は、-ArgumentListexe 名 (notepad、ping など) を使用するときにフル パスは必要ありません。

追加パラメータ:

Invoke-WmiMethod、 ( SSHを使用せずにリモートマシン上の何かにローカルPSを使用する良い方法)、などの追加パラメータをサポートしています-Credential-ComputerNameInvoke-Impersonation詳細はこちら

コマンドレット構文の説明と追加のコマンドレット ツール:

  • 議論は名前-Pathに向けられてWmiObjectいる。数十WmiObjects、それぞれに多数のMethodsおよびがありますProperties
  • 引数-Nameは使用される を指示しますMethod
  • Wmi-Objects使用可能なすべてのものを一覧表示するにはGet-WmiObject -List(この方法では必要なオブジェクトを見つけるのが非常に困難です)。
  • 利用可能なすべてのものWin32_Process Methodsを一覧表示して表示するにはProperties
Get-WmiObject -List |where{$_.name -match '^Win32_Process$'}

これにより、次の構造の出力が返されます。

   NameSpace: ROOT\cimv2

Name                                Methods              Properties
----                                -------              ----------
Win32_Process                       {Create, Terminat... {Caption, CommandLine, CreationClassName, CreationDate...}

もちろん、を使用すると、上記のコマンドで使用したすべての使用可能なもの、および使用しなかったすべての使用可能なもの|Select-Object -ExpandProperty (_your_property_here_)が表示されます。MethodsCreateProperties

関連情報