1

次のコマンドを使用して、UNIXで永続プロセスを開始できます。

nohup process &

bashセッションを閉じた後も実行を継続します。WindowsでのPowerShellリモーティングでは同じことができないようです。サーバーとのPSRemoteセッションを開いてプロセスを開始できますが、そのセッションを閉じるとすぐに終了します。私の仮定では、これは強力なサンドボックス化のメリットですが、どうにかして回避したいメリットです。何か案は?

これまでに試しました:

$exe ='d:\procdump.exe'
$processArgs = '-ma -e -t -n 3 -accepteula w3wp.exe d:\Dumps'
1) [System.Diagnostics.Process]::Start($exe,$processArgs)
2) Start-Job -ScriptBlock {param($exe,$processArgs) [System.Diagnostics.Process]::Start($exe,$processArgs)} -ArgumentList ($exe,$processArgs)
3) start powershell {param($exe ='d:\procdump.exe', $processArgs = '-ma -e -t -n 3 -accepteula w3wp.exe d:\Dumps') [System.Diagnostics.Process]::Start($exe,$processArgs)}
4) start powershell {param($exe ='d:\procdump.exe', $processArgs = '-ma -e -t -n 3 -accepteula w3wp.exe d:\Dumps') Start-Job -ScriptBlock {param($exe,$processArgs) [System.Diagnostics.Process]::Start($exe,$processArgs)} -ArgumentList ($exe,$processArgs)}

セッションを閉じるまでプログラムが実行され、その後procdumpが取得されます。procdumpの最も優れた点は、自己終了することです。その事実を利用するために、実行したままにしておきたいと思います。

私はADPlusをリモートで起動し、セッションを開いたままにして、キャプチャを強制終了するためにセッションを終了していました。これは一種の便利な機能ですが、ハードドライブがいっぱいになる前に、十分な数のダンプをキャプチャした後、キャプチャプロセスを強制終了するのに適切なタイミングを判断するために、非常に多くのポーリング、検査、および決定が必要です。適切なトリガーを待機している間、procdumpを無期限に実行したままにしておくことができます。十分なデータがキャプチャされると、procdumpは停止します。可愛いね。

リモートセッションを終了した後も実行を継続するには、procdumpを取得する必要があります。procdumpのスケジュールされたタスクを作成して開始することはおそらく価値がありませんが、それは私が残した最後のアイデアについてです。

ありがとう。

4

1 に答える 1

0

これは直接不可能です。間接的に、はい、タスクまたはサービスをリモートで作成して開始することはできますが、プロセスをSYSTEMスペースにプッシュするだけではできません。

ローカルジョブを生成してリモートジョブを開始し、必要な期間存続することで問題を解決しました。ローカルジョブはリモートセッションを開いたままにし、適切なタイミングで終了します。親ローカルプロセスは中断することなく実行を継続し、気になったらReceiveJobを使用してリモートprocdumpの戻り値を取得できます。

于 2013-01-17T21:42:14.413 に答える