Linux PowerShell'deki 'nohup'ın eşdeğeri nedir?
Yinelenen sorunun varlığını çok iyi biliyorum . Ancak bu soru yanıtlandı olarak işaretlenmiş ve orijinal soruyu yanıtladığını hiç sanmıyorum.
$ nohup commandTutar yürütme komutu bile nohup kalıpların ana süreç (kabuk). Daha fazla bilgi burada: nohup ve ve işareti arasındaki fark nedir .
Win32 api durumunda , sistem bir işlemi sonlandırırken, sürecin oluşturduğu herhangi bir alt işlemi sonlandırmıyor satırını görüyorum . Bir sürecin sonlandırılması, WH_CBT kanca prosedürleri için bildirim oluşturmaz. . Bu, sorduğum istenen davranış. Bu, win32 powershell ile otomatik olarak çalışır. Ancak linux powershell'lerde Start-Job, powershell öldürüldüğünde öldürülmesi anlamında powershell bağlamında sadece arka plan işidir.
Misal:
➜ ~ 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
Yanıtlar
Start-JobPowerShell v6 + 'nın &arka plan işlecini kullanmak veya kullanmak bir seçenek değildir, çünkü işin sonlandırılması, ondan başlatılan ve hem Windows hem de Unix benzeri platformlarda olan alt işlemleri de sonlandırır .
Bununla birlikte, cmdlet nohuparacılığıyla benzer davranışlar elde edebilirsiniz Start-Process:
On Unix benzeri platformlar , sen birleştirebilirsiniz Start-Processile nohup:
Aşağıdaki örnek lansmanları kalır hayatta terminali başlatılması size kapattıktan sonra bile bir arka plan PowerShell örneği; .her saniyede bir yayar ve nohuphem stdout hem de stderr çıktısını nohup.outgeçerli dizindeki dosyada toplar , zaten varsa böyle bir dosyaya ekler:
# 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 }"'
On Windows'un , Start-Processvarsayılan olarak yeni bir konsol penceresinde bağımsız sürecini oluşturur kullanabilirsiniz -WindowStyle Hiddenhayatta bağımsız fırlatma kabuğun kalacaktır gizli pencerede bu süreci başlatmak için.
# 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 }"'