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
เครื่องมือที่คุณใช้เรียกว่า srvany.exe
วิธีเดียวใน Windows ที่คุณสามารถเริ่มต้นกระบวนการโดยผู้ใช้ดำเนินการต่อหลังจากออกจากระบบ (เช่นที่ "nohup" ทำ) คือเริ่มโดยผ่าน "task task" หรือบริการ 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" เพื่อสร้างงานที่กำหนดเวลาไว้คุณจะต้องแก้ไขสิทธิ์ในโฟลเดอร์% SystemRoot% \ Tasks ดูที่นี่สำหรับข้อมูลบางส่วนในหน้านั้น: http://technet.microsoft.com/en-us/library/cc785125(WS.10).aspx
ทั้งหมดนี้ขึ้นอยู่กับวัตถุประสงค์สูงสุดของคุณ คุณสามารถรันงานที่กำหนดเวลาไว้ด้วยตัวเลือกให้เรียกใช้เฉพาะเมื่อผู้ใช้เข้าสู่ระบบที่ตั้งค่าเป็นปิดการใช้งาน คุณสามารถใช้ psexec จากเครื่องระยะไกล ดีกว่ายังอาจใช้กระบวนการเป็นบริการ ตรวจสอบนี้การค้นหาของ Google , นี้การค้นหาอื่น ๆ ของ Google , หัวข้อนี้และหัวข้ออื่น ๆ นี้สำหรับโอกาสในการขายที่เป็นไปได้บางส่วนในการหาวิธีการแก้ไขการค้นหาของคุณ ในที่สุดก็ปรากฏว่าไม่มีแน่นอนเทียบเท่ากับ nohup บนเครื่อง Windows
START
คำสั่งไม่ได้แยกออกเช่นมันยังคงเป็นลูกของกระบวนการที่สร้างมันขึ้นมา ในตัวอย่างของคุณมันจะหมายความว่า 'command3' จะตายเมื่อไรก็ตามที่กระบวนการแม่ออก Unix เลี่ยงสิ่งนี้โดยการทำถูกเรียกว่า 'fork-two' แต่ฉันไม่รู้ว่าเทียบเท่าใน Windows