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.