'nohup' ใน linux PowerShell เทียบเท่าอะไร
ฉันรู้ดีว่ามีคำถามซ้ำกันอยู่ แต่คำถามนั้นถูกทำเครื่องหมายว่าตอบแล้วและฉันไม่คิดว่ามันจะตอบคำถามเดิมเลย
$ nohup commandช่วยให้รันคำสั่งแม้ว่าการปกครอง (เชลล์) แม่พิมพ์ nohup ดูข้อมูลเพิ่มเติมได้ที่นี่: nohup และ ampersand ต่างกันอย่างไร
ในกรณีของ Win32 api ฉันเห็นบรรทัดเมื่อระบบกำลังยุติกระบวนการจะไม่ยุติกระบวนการย่อยใด ๆ ที่กระบวนการสร้างขึ้น การยุติกระบวนการไม่สร้างการแจ้งเตือนสำหรับโพรซีเดอร์ WH_CBT hook . นี่คือพฤติกรรมที่ฉันต้องการ ใช้งานได้กับ win32 powershell โดยอัตโนมัติ แต่ด้วย linux powershell Start-Jobมันเป็นเพียงงานเบื้องหลังในบริบท powershell ในแง่ที่ว่ามันถูกฆ่าเมื่อ powershell ถูกฆ่า
ตัวอย่าง:
➜ ~ powershell-preview -c "Start-Job { /bin/sleep 1000 }"
Id Name PSJobTypeName State HasMoreData Location Command
-- ---- ------------- ----- ----------- -------- -------
1 Job1 BackgroundJob Running True localhost /bin/sleep 1000
➜ ~ ps ux | grep sleep
mvaidya 166986 0.0 0.0 9032 664 pts/11 S+ 18:59 0:00 grep --color=auto --exclude-dir=.bzr --exclude-dir=CVS --exclude-dir=.git --exclude-dir=.hg --exclude-dir=.svn --exclude-dir=.idea --exclude-dir=.tox sleep
คำตอบ
การใช้Start-Jobหรือ PowerShell v6 + 's &ประกอบพื้นหลังไม่ได้เป็นตัวเลือกเพราะการยกเลิกงานนี้จะสิ้นสุดกระบวนการที่เด็กเปิดตัวจากมันซึ่งงานที่มี - ทั้งบน Windows และบน Unix-เช่นแพลตฟอร์ม
อย่างไรก็ตามคุณสามารถบรรลุnohupพฤติกรรมเหมือนผ่านStart-Processcmdlet:
บนแพลตฟอร์มที่เหมือนUnixคุณสามารถใช้ร่วมStart-Processกับnohup:
ตัวอย่างต่อไปนี้เปิดตัวอินสแตนซ์ PowerShell พื้นหลังที่ยังคงมีชีวิตอยู่แม้ว่าคุณจะปิดเทอร์มินัลการเรียกใช้งาน มันจะส่งเสียง.ทุกวินาทีและnohupรวบรวมเอาท์พุท stdout และ stderr ในไฟล์nohup.outในไดเร็กทอรีปัจจุบันต่อท้ายไฟล์ดังกล่าวหากมีอยู่แล้ว:
# Runs for 2 minutes and appends both stdout and stderr output to ./nohup.out
Start-Process nohup 'pwsh -nop -c "1..120 | % { write-host . -nonewline; sleep 1 }"'
บนวินโดวส์ที่Start-Processโดยค่าเริ่มต้นสร้างกระบวนการที่เป็นอิสระในหน้าต่างคอนโซลใหม่คุณสามารถใช้-WindowStyle Hiddenเพื่อเปิดกระบวนการที่ในหน้าต่างที่ซ่อนอยู่ที่จะยังคงมีชีวิตอยู่อย่างอิสระของเปลือกเปิดตัว
# Runs for 2 minutes and appends success output to ./nohup.out
Start-Process -WindowStyle Hidden pwsh '-nop -c "1..120 | % { Add-Content -nonewline nohup.out -Value .; sleep 1 }"'