nohupはプロセスをバックグラウンドで実行します。Windowsに相当するものはありますか?
nohupはプロセスをバックグラウンドで実行します。Windowsに相当するものはありますか?
回答:
startコマンドを使用して、コマンドウィンドウのバックグラウンドでプロセスを実行できます。
command1
command2
start command3
command4
command2はcommand1が終了するまで待機しますが、command4はcommand3が終了するまで待機しません。
ログオンしたユーザーとは無関係に実行する必要がある場合は、サービスとしてプロセスを開始する必要があり、anysrv.exeを使用できます。
exec(<some windows executable>)
。Process Explorerで親子関係を明確に見ることができ、内部から開始したものはすべてexec()
存続しません。スタート時に開始したcmd.exe
プロセスcmd.exe
が終了時に「正しく」孤立しているように見える「スタート」メニューから起動すると動作するようです。明らかに、これをよりよく理解する必要があります。:-(
Windowsサービスを確認することをお勧めします。Windowsサービスとして任意のプロセスをホストするためにダウンロードできるツールがいくつかあります。これにより、Windowsの起動時にプロセスがバックグラウンドでロードされるため、ユーザーの操作を必要としない限り、このようにホストできるはずです。
後のツールはsrvany.exeと呼ばれます。
Windowsでユーザーが開始したプロセスをログオフ後も実行し続けることができる唯一の方法(つまり、「nohup」が行うこと)は、「スケジュールされたタスク」またはWindowsサービスとして開始することです。ユーザーがログオンセッションのすべてのプロセスをログオフすると、強制終了されます。
「スケジュールされたタスク」メソッドを試すゲームをしているなら、プログラムでそれらを作成する方法を知りたいでしょう。Win32_ScheduledJob WMIクラスは、それを行うことができます。ドキュメントの詳細については 、http://www.microsoft.com/technet/scriptcenter/guide/sas_man_rsxs.mspx? mfr = trueを参照してください。
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を参照してください。
これはすべてあなたの究極の目的に依存します。ユーザーがログオンしてDISABLEDに設定されている場合にのみ実行するオプションを使用して、スケジュールされたタスクを実行できます。リモートマシンからpsexecを使用することもできます。さらに良いのは、プロセスをサービスとして実行することです。このGoogle検索、この他のGoogle検索、このスレッド、およびこの他のスレッドを調べて、ソリューションの検索で見込み顧客を探してください。最終的には全く存在しないことが表示されます正確な Windowsマシン上でnohupをと同等。
START
コマンドはデタッチを行いません。つまり、コマンドを作成したプロセスの子です。あなたの例では、マザープロセスが終了するたびに「command3」が死ぬことを意味します。Unixはこれを回避するために「fork-twice」として知られていましたが、Windowsで同等のものを知りません。