Windowsのバックグラウンドでプロセスを実行する方法はありますか?Windowsのnohupと同等


回答:


8

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

command1
command2
start command3
command4

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

ログオンしたユーザーとは無関係に実行する必要がある場合は、サービスとしてプロセスを開始する必要があり、anysrv.exeを使用できます


私が理解している限り、STARTコマンドはデタッチを行いません。つまり、コマンドを作成したプロセスの子です。あなたの例では、マザープロセスが終了するたびに「command3」が死ぬことを意味します。Unixはこれを回避するために「fork-twice」として知られていましたが、Windowsで同等のものを知りません。
unixhacker2010

少なくともWindows 7でCOMMAND3が死ぬことはない、例えばuはして終了し、メモ帳がまだ実行されます「メモ帳を起動し、」CMDプロンプトに取得することができます
アラゴルン

うん、あなたは正しい。しかし、私ができるのは別の言語内からテストしていただけですexec(<some windows executable>)Process Explorerで親子関係を明確に見ることができ、内部から開始したものはすべてexec()存続しません。スタート時に開始したcmd.exeプロセスcmd.exeが終了時に「正しく」孤立しているように見える「スタート」メニューから起動すると動作するようです。明らかに、これをよりよく理解する必要があります。:-(
unixhacker2010

6

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

Windows Server 2003リソースキット

後のツールはsrvany.exeと呼ばれます。


5

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を参照してください。


これを行うことと、schtasks.exeまたはタスクスケジューラGUIを使用することの利点は何ですか?
ヘルヴィック2009

このAPIとschtasks.exeの機能的な違いはあまりありません。GUIの利点は、これをプログラムで実行できることです。
エヴァンアンダーソン

0

これはすべてあなたの究極の目的に依存します。ユーザーがログオンしてDISABLEDに設定されている場合にのみ実行するオプションを使用して、スケジュールされたタスクを実行できます。リモートマシンからpsexecを使用することもできます。さらに良いのは、プロセスをサービスとして実行することです。このGoogle検索この他のGoogle検索このスレッド、およびこの他のスレッドを調べて、ソリューションの検索で見込み顧客を探してください。最終的には全く存在しないことが表示されます正確な Windowsマシン上でnohupをと同等。


私の究極の目的は、プロセスをユーザーから隠すことです。生成されるウィンドウを非表示にします。
Jaderディアス
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.