Чи є спосіб запускати процеси у фоновому режимі в Windows? nohup еквівалент для Windows


Відповіді:


8

Ви можете використовувати команду start для запуску процесу у фоновому режимі вікна команд.

command1
command2
start command3
command4

command2 чекає, поки команда1 закінчить, але command4 не чекає, що команда3 закінчиться.

і якщо вам потрібно запустити незалежно від користувача, який увійшов у систему, вам потрібно запустити процес як сервіс, і ви можете використовувати anysrv.exe


Наскільки я розумію, STARTкоманда не робить відрив, тобто це все ще дитина процесу, який її створив. У вашому прикладі це означатиме, що команда3 загине щоразу, коли завершується процес матері. Unix обходить це шляхом, був відомий як "два рази", але я не знаю еквівалента в Windows.
unixhacker2010

принаймні, в Windows 7 команда3 НЕ загине, наприклад, ти можеш потрапити в cmd-підказку "запустити блокнот", тоді вихід і блокнот все ще працюватимуть
Aragorn

Так, ви праві. Однак я тестував з іншої мови, де все, що я можу 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 В основному, ви дивитесь на те, що ви робите (безсоромно викрадено у 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


Яка перевага цього в порівнянні з використанням schtasks.exe або GUI планувальника завдань?
Гельвік

Існує не так багато функціональної різниці між цим API та schtasks.exe. Перевага GUI полягає в тому, що ви можете це робити програмно.
Еван Андерсон

0

Все це залежить від того, яка ваша кінцева мета. Ви можете виконати заплановане завдання з можливістю запуску, лише якщо користувач зареєстрований увімкнено ВИМКНЕНО. Можливо, ви можете використовувати psexec з віддаленої машини. Ще краще, можливо, запустити процес як послугу. Перегляньте цей пошук у Google , цей інший пошук у Google , цей потік та цю іншу нитку для деяких можливих результатів у вашому пошуку рішення. Зрештою виявляється, що на машині Windows немає точного еквіваленту nohup.


Моя кінцева мета - приховати процес від користувача. Сховати вікна, які вона породжує.
Jader Dias
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.