Windows でバックグラウンドでプロセスを実行する方法はありますか? Windows 用の nohup に相当するもの

Windows でバックグラウンドでプロセスを実行する方法はありますか? Windows 用の nohup に相当するもの

nohup はバックグラウンドでプロセスを実行します。Windows に相当するものはありますか?

答え1

start コマンドを使用すると、コマンド ウィンドウのバックグラウンドでプロセスを実行できます。

command1
command2
start command3
command4

command2 は command1 が完了するまで待機しますが、command4 は command3 が完了するまで待機しません。

ログオンしたユーザーとは独立して実行する必要がある場合は、プロセスをサービスとして起動する必要があり、任意のsrv.exe

答え2

Windows サービスを調べてみるとよいでしょう。任意のプロセスを Windows サービスとしてホストするためにダウンロードできるツールがいくつかあります。これにより、プロセスは Windows の起動時にバックグラウンドで読み込まれるため、ユーザーの操作を必要としない場合は、このようにホストできるはずです。

Windows Server 2003 リソース キット

必要なツールは srvany.exe と呼ばれます。

答え3

Windows で、ユーザーが開始したプロセスをログオフ後も実行し続ける唯一の方法 (つまり、「nohup」が行うこと) は、そのプロセスを「スケジュールされたタスク」または Windows サービスとして開始することです。ユーザーがログオフすると、ログオン セッション内のすべてのプロセスが終了します。

「スケジュールされたタスク」方式を試してみたい場合は、プログラムでタスクを作成する方法を知っておく必要があります。Win32_スケジュールジョブWMI クラスでそれができます。詳細なドキュメントはここにあります:http://www.microsoft.com/technet/scriptcenter/guide/sas_man_rsxs.mspx?mfr=true 基本的には、次の操作を行うことになります (Microsoft から恥ずかしげもなく盗用しました)。

Set objService = GetObject("winmgmts:\\.")
Set objNewJob = objService.Get("Win32_ScheduledJob")
errJobCreated = objNewJob.Create("Program-to-execute.exe", "ugly-formatted-time-string-per-Microsoft-docs",True ,1 OR 4 OR 16, , ,JobID)
If Err.Number = 0 Then
 Wscript.Echo "New Job ID: " & JobID
Else
 Wscript.Echo "An error occurred: " & errJobCreated
End If

「joe ユーザー」にスケジュールされたタスクを作成する権限を与えるには、%SystemRoot%\Tasks フォルダの権限を変更する必要があります。この点については、こちらを参照してください。http://technet.microsoft.com/en-us/library/cc785125(WS.10).aspx

答え4

これはすべて、最終的な目的によって異なります。ユーザーがログオンしている場合にのみ実行するオプションを無効にして、スケジュールされたタスクを実行することができます。リモートマシンから psexec を使用することもできます。さらに良いのは、プロセスをサービスとして実行することです。このGoogle検索この他のGoogle検索このスレッド、 そしてこの他のスレッド解決策を探すための手がかりとなるものをいくつか探してみてください。結局のところ、解決策はないようです。ちょうどWindows マシンの nohup に相当します。

関連情報