Відповіді:
Ви можете використовувати команду start для запуску процесу у фоновому режимі вікна команд.
command1
command2
start command3
command4
command2 чекає, поки команда1 закінчить, але command4 не чекає, що команда3 закінчиться.
і якщо вам потрібно запустити незалежно від користувача, який увійшов у систему, вам потрібно запустити процес як сервіс, і ви можете використовувати anysrv.exe
exec(<some windows executable>)
. Я чітко бачу в Process Explorer стосунки батько-дитина, і все, що я починаю зсередини exec()
, не виживає. Виправте, що, здається, це працює, якщо я запускаю cmd.exe
з меню "Пуск", де запущений процес, як видається, осиротів "правильно" при cmd.exe
виході. Ясна річ, я мушу це краще зрозуміти. :-(
Можливо, ви захочете подивитися на послуги Windows. Існує кілька інструментів, які ви можете завантажити, щоб розмістити будь-який процес як службу Windows. Це призводить до завантаження процесу у фоновому режимі при запуску Windows, тому за умови, що він не потребує взаємодії з користувачем, ви повинні мати можливість розмістити його так.
Комплект ресурсів Windows Server 2003
Засіб, який ви шукаєте, називається srvany.exe.
Єдиний спосіб в Windows, щоб ви могли розпочати процес, розпочатий користувачем, продовжувати працювати після виходу з системи (тобто те, що робить "nohup") - це запустити його через "заплановане завдання" або як службу Windows. Коли користувач вийде з системи, всі процеси в процесі входу в систему будуть вбиті.
Якщо ви граєте, щоб спробувати метод "Заплановані завдання", ви захочете знати, як їх створити програмно. Win32_ScheduledJob клас 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
Щоб надати "користувачеві Джо" можливість створювати заплановані завдання, вам доведеться змінити дозвіл у папці% SystemRoot% \ Tasks. Ознайомтеся з інформацією про цей фронт: http://technet.microsoft.com/en-us/library/cc785125(WS.10).aspx
Все це залежить від того, яка ваша кінцева мета. Ви можете виконати заплановане завдання з можливістю запуску, лише якщо користувач зареєстрований увімкнено ВИМКНЕНО. Можливо, ви можете використовувати psexec з віддаленої машини. Ще краще, можливо, запустити процес як послугу. Перегляньте цей пошук у Google , цей інший пошук у Google , цей потік та цю іншу нитку для деяких можливих результатів у вашому пошуку рішення. Зрештою виявляється, що на машині Windows немає точного еквіваленту nohup.
START
команда не робить відрив, тобто це все ще дитина процесу, який її створив. У вашому прикладі це означатиме, що команда3 загине щоразу, коли завершується процес матері. Unix обходить це шляхом, був відомий як "два рази", але я не знаю еквівалента в Windows.