nohup запускает процесс в фоновом режиме. Есть какой-нибудь эквивалент для Windows?
nohup запускает процесс в фоновом режиме. Есть какой-нибудь эквивалент для Windows?
Ответы:
Вы можете использовать команду запуска для запуска процесса в фоновом режиме командного окна.
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, поэтому при условии, что он не требует взаимодействия с пользователем, вы сможете разместить его таким образом.
Windows Server 2003 Resource Kit
Инструмент, который вам нужен, называется 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
Чтобы предоставить пользователю «joe» возможность создавать запланированные задачи, вам нужно изменить разрешение в папке% SystemRoot% \ Tasks. Смотрите здесь для получения дополнительной информации по этому вопросу: http://technet.microsoft.com/en-us/library/cc785125(WS.10).aspx
Все зависит от вашей конечной цели. Вы можете запустить запланированное задание с возможностью запуска только в том случае, если пользователь вошел в режим ОТКЛЮЧЕНО. Вы могли бы использовать psexec с удаленной машины. Еще лучше, возможно, запустить процесс как службу. Посмотрите этот поиск Google , этот другой поиск Google , эту ветку и эту другую ветку для поиска возможных потенциальных клиентов в поиске решения. В конечном счете, похоже, что на машине с Windows нет точного эквивалента nohup.
START
команда не отсоединяется, то есть она все еще является потомком процесса, который ее создал. В вашем примере это будет означать, что 'command3' умрет всякий раз, когда выходит из материнского процесса. Unix обходит это, делая это известно как «двойная вилка», но я не знаю аналога в Windows.