Windows의 백그라운드에서 프로세스를 실행하는 방법이 있습니까? 창문과 동등한 nohup


답변:


8

start 명령을 사용하여 명령 창의 백그라운드에서 프로세스를 실행할 수 있습니다.

command1
command2
start command3
command4

command2는 command1이 완료 될 때까지 대기하지만 command4는 command3이 완료 될 때까지 기다리지 않습니다.

로그온 한 사용자와 독립적으로 실행해야하는 경우 프로세스를 서비스로 시작해야하며 anysrv.exe 를 사용할 수 있습니다 .


내가 이해하는 한 START명령은 분리를 수행하지 않습니다. 즉 명령을 생성 한 프로세스의 자식입니다. 귀하의 예에서 이것은 모회사 프로세스가 종료 될 때마다 'command3'이 죽는다는 것을 의미합니다. 유닉스는 이것을함으로써 우회하는 것을 '두 번 포크'라고하지만 Windows에서는 이에 상응하는 것을 알지 못합니다.
unixhacker2010

적어도 Windows 7에서 command3는 죽지 않을 것입니다. 예를 들어 u는 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에서 사용자가 프로세스를 로그 오프 한 후에도 계속 실행할 수있는 유일한 방법은 "예약 된 작업"또는 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


schtasks.exe 또는 작업 스케줄러 GUI를 사용하는 것의 이점은 무엇입니까?
Helvick

이 API와 schtasks.exe 사이에는 기능상의 차이가별로 없습니다. GUI의 장점은 프로그래밍 방식으로이 작업을 수행 할 수 있다는 것입니다.
Evan Anderson

0

이것은 모두 당신의 궁극적 인 목적이 무엇인지에 달려 있습니다. 사용자가 로그온 할 수없는 경우에만 실행 옵션을 사용하여 예약 된 작업을 실행할 수 있습니다. 원격 시스템에서 psexec를 사용할 수 있습니다. 프로세스를 서비스로 실행하는 것이 더 나을 수도 있습니다. 확인 이 Google 검색 , 이 다른 Google 검색 , 이 스레드이 다른 스레드 솔루션에 대한 검색에 몇 가지 가능한 리드를 들어. 궁극적 으로 Windows 시스템에는 nohup과 정확히 일치 하지 않는 것으로 보입니다 .


나의 궁극적 인 목적은 사용자에게 프로세스를 숨기는 것입니다. 생성 된 창을 숨 깁니다.
Jader Dias
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.