답변:
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에서 사용자가 프로세스를 로그 오프 한 후에도 계속 실행할 수있는 유일한 방법은 "예약 된 작업"또는 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 user"에게 예약 된 작업을 생성 할 수있는 권한을 부여하려면 % SystemRoot % \ Tasks 폴더에 대한 권한을 수정해야합니다. 그 정면에 대한 정보는 여기를 참조하십시오 : http://technet.microsoft.com/en-us/library/cc785125(WS.10).aspx
이것은 모두 당신의 궁극적 인 목적이 무엇인지에 달려 있습니다. 사용자가 로그온 할 수없는 경우에만 실행 옵션을 사용하여 예약 된 작업을 실행할 수 있습니다. 원격 시스템에서 psexec를 사용할 수 있습니다. 프로세스를 서비스로 실행하는 것이 더 나을 수도 있습니다. 확인 이 Google 검색 , 이 다른 Google 검색 , 이 스레드 및 이 다른 스레드 솔루션에 대한 검색에 몇 가지 가능한 리드를 들어. 궁극적 으로 Windows 시스템에는 nohup과 정확히 일치 하지 않는 것으로 보입니다 .
START
명령은 분리를 수행하지 않습니다. 즉 명령을 생성 한 프로세스의 자식입니다. 귀하의 예에서 이것은 모회사 프로세스가 종료 될 때마다 'command3'이 죽는다는 것을 의미합니다. 유닉스는 이것을함으로써 우회하는 것을 '두 번 포크'라고하지만 Windows에서는 이에 상응하는 것을 알지 못합니다.